我想做的是将地图变成unordered_map。我需要这个,因为无序地图需要在一开始就初始化,而在我的情况下,我不能这样做,因为我不知道开头的数据。所以我写了一个比较函数:
struct MapComparator
{
bool operator()( const string& a, const string& b ) const { return a != b; }
};
typedef std::map<string, SParamData, MapComparator> MapParamData;
这个问题是每当我访问已经使用的字段时,不是获取存储在那里的值,而是创建并返回一个具有相同名称和默认值的新字段。
答案 0 :(得分:1)
阅读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;
<小时/> 自从C ++ 11新容器问世以来。它是std :: unordered_map。在此容器中,键没有定义任何特定的键顺序。它使用哈希函数来加速匹配。 在这种情况下,当您需要自定义键匹配时,您必须提供两个功能:
注意,如果认为两个项相等,则散列函数必须为这两个项返回相同的散列值。
答案 1 :(得分:0)
我需要这个,因为
bottom: 100%
需要在一开始就初始化
unordered_map
有一个default constructor,因此您可以创建一个空的std::unordered_map
并在以后填充它。