【发布时间】:2018-09-26 16:46:51
【问题描述】:
有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
要求:如下例
案例1:品牌名称输入时。所有者名称作为输出。
input : Bacard_old
output: Facundo
案例2:当所有者名称输入品牌名称作为输出时。
input : Facundo
output : Bacardi_old, Bacardi_new ,Smirnoff_new ,Seagram_new
我的方法:
1.我有一张地图如下:
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。没有 boost 库。
【问题讨论】:
-
可能是 stackoverflow.com/questions/42209189/… 的副本 你看过 boost bimap 吗? boost.org/doc/libs/1_68_0/libs/bimap/doc/html/index.html
-
我已经提到我坚持使用 c++11,因为不允许使用 boost 库
-
感谢您相应地更新问题(之前没有提到提升)。不过,boost 和 c++11 之间不一定存在因果关系。 boost 在 c++11 出现之前就已经存在了
-
如果您可以按键或按值搜索,那么仅使用 map
> 并将品牌和所有者作为键并保持两个向量都是最新的。只有一个映射比两个映射内存少,但仍然有两个插入而不是一个。我认为这是一个很好的妥协。如果您担心所有者可能与品牌同名,您可以在密钥前面加上“品牌:”或“所有者:”。