如何将比较器传递到内部地图?

时间:2018-04-03 13:52:15

标签: c++ dictionary

我需要为内部地图实现两个带有自定义比较器的嵌套地图。

我有:

struct Rank {
    Rank() = default;
    int rank = 0;
    bool condition = false;
};

和比较器

struct compareRank {
    bool operator()(const Rank& lhs, const Rank& rhs) const {
        return lhs.rank < rhs.rank;
    }
};

在我的main()函数中,我声明:

map<int, map<string, Rank, compareRank>> db;

这背后的想法如下:内部map应按其等级对字符串进行排序。

然而,当我尝试这样做时:

db[3]["hello"] = Rank();

编译说:

  

没有匹配函数来调用'const compareRank'类型的对象

我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

std::map是基于密钥的容器。这意味着它对键进行排序,而不是值。当地图试图对compareRank键进行排序时,Rank需要std::string

如果您不需要std::string密钥,则可以考虑使用std::set<Rank>

如果您需要同时使用std::stringRank作为键,则可以使用boost::bimap