2016-04-15 69 views
1

所以我搜索了一遍,发现我们可以使用多重映射将一组等效键映射到不同的值。我想知道如何做相反的事情?那是将不同的键映射到相同的值?有没有一个stl的数据结构?在C++中将不同的键映射到相同的值

+0

'map'不要求这些值是唯一的。只是钥匙。 – cHao

+1

只是反转地图,所以值是关键,反之亦然 –

回答

0

您可以有一个std::map,使多个键映射到相同的值。没有什么反对的。但是,您可能要查找的是能够查找映射到给定值的所有键,而无需遍历整个地图。我不认为有这样的数据结构。

+0

@Sahu Yea其实我创建了一张如下图:std :: map > ,std :: string> m。问题是,当我给这个映射m存在的pair对时,它没有打印任何值。这里有什么可能是错的?我想也许是因为有重复的值,而地图只允许一对一的对应关系。这就是我发布这个的原因。任何帮助将感恩。 – slin6174

+0

@ dl23lin,在这种情况下,你应该删除这个问题,并询问你试过的代码,你期望看到的是什么,以及实际看到的是什么。这比这个问题更有用。 –

3

正常的std::map(或std::unordered_map)可以做到这一点。您对如何做几个选择是:

  • 普通key-value存储,在那里你复制值需要
  • 普通key-value存储,但其中的值是一个指向实际数据可以共享,可选择使用std::shared_ptr
  • 使用某种类型的结构(一std::tuple也许)领取钥匙(尽管它可能更多的麻烦处理这比它的价值,没有什么我真的建议)
  • 使用Boost multi-index containers

借助Boost,您可以使用现成的解决方案,并且如果您已经在项目中使用了Boost(它是一套很好的库,并且很好地补充了标准库),我认为选择它是不容易的该解决方案。

相关问题