Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 映射比较函数_C++_Stdmap - Fatal编程技术网

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;