繁体   English   中英

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;


从C ++ 11开始,引入了新的容器。 它是std :: unordered_map 在此容器中,键没有定义任何特定的键顺序。 它使用哈希函数来加快匹配速度。 在这种情况下,当您需要自定义键匹配时,您必须提供两个功能:

  • 哈希函数
  • 平等的功能

注意,如果认为两个项目相等,则哈希函数必须为此两个项目返回相同的哈希值。

我需unordered_map因为unordered_map需要在开始时进行初始化

std::unordered_map具有默认的构造函数 ,因此您可以创建一个空的std::unordered_map并稍后填充它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM