c++ - 映射唯一值和重复值的有效方法。可以访问键或值的位置

标签 c++ c++11 stdmap

有n个字符串需要映射到另一个字符串。

Ex :     Bacardi_old - > Facundo 
         Smirnoff_old -> Pyotr 
         Seagram_old  -> Joseph
         This keep on ..... may be around 1000

有些字符串需要与重复字符串进行映射。

Ex :     Bacardi_new  -> Facundo 
         Smirnoff_new -> Facundo 
         Seagram_new  -> Facundo 

要求:如下例

案例一:品牌名称输入时。所有者名称作为输出。

input : Bacard_old
output: Facundo

案例2:所有者名称输入品牌名称作为输出。

input : Facundo
output : Bacardi_old, Bacardi_new ,Smirnoff_new ,Seagram_new 

我的方法:

1.我有一张 map 如下:

std::map<std::string,std::vector<std::string>> Mymap;

2.我是否应该创建两个映射,一个是唯一映射,另一个是重复映射

std::map<std::string,std::string>Mymap
std::map<std::string,std::vector<std::string>>Mymap

从各方面来说,第二个选项是否比第一个选项好。 请提出最佳方法。

注意:我坚持使用 c++11。没有提升库。

最佳答案

最佳方法取决于您的需求。您对访问速度或插入速度感兴趣吗?或者您有兴趣减少使用的内存空间?

您提出的第一个解决方案(key=brand 和 value=owner 的 map )使用的内存较少,但需要完全扫描才能按所有者执行搜索。

第二种方案:

  • key=brand 和 value=owner 的 map
  • 带有 key=brand 和 value= 所有者列表的 map

按所有者搜索和按品牌搜索都更快。但是,它需要更多内存,并且您还需要为每个新对执行 2 次插入。

关于c++ - 映射唯一值和重复值的有效方法。可以访问键或值的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52522613/

相关文章:

C++ 使用 OpenMP 任务并行化文件 I/O 和分析

c++ - 比较两个指针时 ">="运算符的奇怪行为

c++ - map 是否将元素存储为 std::pair?

c++ - 流内容与返回字符串 `str()` 的区别?

c++ - 如何检测函数是否执行IO操作?

c++ - 使用C++ 11基于范围的正确方法是什么?

c++ - 类的函数声明后的 "default"是什么意思?

c++ - 如果返回类型从 auto 更改为 bool,Lambda 函数将抛出错误

c++ - 在 C++ 中使用用户定义的类型作为映射值

c++ - 具有 char* 键和 int 值的容器