C++ 映射比较函数
我想做的是把地图变成无序的地图。我需要这个,因为无序映射需要在一开始就初始化,在我的例子中,我不能这样做,因为我不知道开始时的数据。所以我写了一个比较函数:C++ 映射比较函数,c++,stdmap,C++,Stdmap,我想做的是把地图变成无序的地图。我需要这个,因为无序映射需要在一开始就初始化,在我的例子中,我不能这样做,因为我不知道开始时的数据。所以我写了一个比较函数: struct MapComparator { bool operator()( const string& a, const string& b ) const { return a != b; } }; typedef std::map<string, SParamData, MapCom
struct MapComparator
{
bool operator()( const string& a, const string& b ) const { return a != b; }
};
typedef std::map<string, SParamData, MapComparator> MapParamData;
结构映射比较器
{
bool运算符()(常量字符串&a,常量字符串&b)常量{返回a!=b;}
};
typedef std::map MapParamData;
问题是,每当我访问已经使用的字段时,都会创建并返回一个具有相同名称和默认值的新字段,而不是获取存储在其中的值。阅读的文档。比较函数描述的功能较少,没有区别
中的键被排序,顺序由比较器描述。
所以您需要这样的内容(不区分大小写的密钥示例):
结构映射比较器
{
布尔运算符()(常量字符串&a、常量字符串&b)常量
{
return std::词典编纂的\u比较(
a、 begin(),a.end(),
b、 begin(),b.end(),
[](自动ch1,自动ch2){
返回std::tolower(ch1)自从C++11引入新的容器以来。它是std:。在此容器中,键没有定义任何特定的键顺序。它使用哈希函数来加速匹配。 在这种情况下,当需要自定义密钥匹配时,必须提供两个功能:
- 散列函数
- 相等的函数
无序映射
需要在一开始就初始化
std::unordered_映射
有一个,因此您可以创建一个空的std::unordered_映射
,然后填充它。您的问题说您正在“尝试将映射转换为unordered_映射”,但您的代码中没有显示std::unordered_映射
的任何用法。请对您正在做的事情和您正在尝试做的事情更加细致。!=不定义严格的弱排序关系。您只是想将map
转换为unordered\u 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;