Std :: map比较功能

时间:2018-01-02 16:24:41

标签: c++ stdmap

我想做的是将地图变成unordered_map。我需要这个,因为无序地图需要在一开始就初始化,而在我的情况下,我不能这样做,因为我不知道开头的数据。所以我写了一个比较函数:

    struct MapComparator
{
        bool operator()( const string& a, const string& b ) const { return a != b; }
};  
typedef std::map<string, SParamData, MapComparator> MapParamData;

这个问题是每当我访问已经使用的字段时,不是获取存储在那里的值,而是创建并返回一个具有相同名称和默认值的新字段。

2 个答案:

答案 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并在以后填充它。