![](/img/trans.png)
[英]Implicit conversion to comparison function object (functor) for std::sort but not std::map?
[英]Std::map comparison function
我想做的是将地图变成unordered_map。 我需要这样做是因为无序映射需要从一开始就进行初始化,在我的情况下,我不能这样做,因为我一开始就不知道数据。 所以我写了一个比较函数:
struct MapComparator
{
bool operator()( const string& a, const string& b ) const { return a != b; }
};
typedef std::map<string, SParamData, MapComparator> MapParamData;
问题是,每当我访问已使用的字段时,都将创建并返回一个具有相同名称和默认值的新字段,而不是将值存储在该字段中。
阅读std :: map的文档。 比较功能描述的LESS功能没有不同。
std :: map中的键是有序的,并且顺序由比较器描述。 因此,您需要类似以下内容(不区分大小写的键的示例):
struct MapComparator
{
bool operator()( const string& a, const string& b ) const
{
return std::lexicographical_compare(
a.begin(), a.end(),
b.begin(), b.end(),
[](auto ch1, auto ch2) {
return std::tolower(ch1) < std::tolower(ch2);
});
}
};
typedef std::map<string, SParamData, MapComparator> MapParamData;
注意,如果认为两个项目相等,则哈希函数必须为此两个项目返回相同的哈希值。
我需
unordered_map
因为unordered_map
需要在开始时进行初始化
std::unordered_map
具有默认的构造函数 ,因此您可以创建一个空的std::unordered_map
并稍后填充它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.