可以在Map中将两个键值相同

时间:2012-06-01 05:07:09

标签: c++ linux boost stl map

我已定义了地图

boost::unordered_map<"std::string,std::string">m_mapABC ;

我将值存储在其中就像m_mapABC [strValue1] = strValue2;

并假设我将10个条目存储到地图中。在这种情况下,可以使用相同的键值来存储10个不同的值。或者每次都会覆盖它...我想它会。
在这种情况下,使用std::pair会对我有所帮助。

std::map<"std::string, std::pair<"std::string", bool>>myMap2

std::pair可以有2个键值相等(我猜我是对的)...在每种情况下bool值是多少,在第一种情况下它是TRUE,第二次是FALSE还是在反之亦然?

我还听说过std::tupleboost::tuple,其中一个密钥可用于存储不同的值。

我不太清楚如何迭代它们......我需要帮助

3 个答案:

答案 0 :(得分:5)

您可能需要multimap而不是map

答案 1 :(得分:5)

如果您想将多个值与一个键相关联,请使用std::multimap(或std::unordered_multimap)代替std::map

在某些情况下,改为std::map<key_type, std::vector<mapped_type> >是有意义的(个人而言,我经常认为这更可取)。

答案 2 :(得分:3)

如果您想使用相同的密钥存储多个项目,则应使用multimap(也适用于unordered_个变体)。

以下内容应该有效:

std::multimap<std::string,int> mm;
for( int i = 0; i != 10; ++i )
  mm.insert(make_pair("hello world"), i);

您的多重映射应包含十个带有“hello world”键和10个不同值的条目。