我需要为内部地图实现两个带有自定义比较器的嵌套地图。
我有:
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'类型的对象
我不知道如何解决它。
答案 0 :(得分:1)
std::map
是基于密钥的容器。这意味着它对键进行排序,而不是值。当地图试图对compareRank
键进行排序时,Rank
需要std::string
。
如果您不需要std::string
密钥,则可以考虑使用std::set<Rank>
。
如果您需要同时使用std::string
和Rank
作为键,则可以使用boost::bimap