C++,如何使用映射来保存多个整数值

C++, How to use maps for holding multiple integer values

我正在为一个 C++ 项目开发一个单词标记系统。我需要一个地图存储以下键值信息的系统:

word["with"] = 16, 6, 15;

其中["with"]是索引,三元组(16,6,15)是索引的值。我试过地图,但我不断收到语义错误,据我所知,这是由于无法为键提供超过 1 个值的结果。

我尝试了多个地图,但我似乎无法获得满足我需要的语法?

我想避免使用 Structs 或 类,因为这个数据库已经包含 200 个单词,并且我正在努力保持我的代码行可读性并且太少。

我该怎么做?我错过了什么吗?您将如何声明这样的系统?

您可以创建一个映射,将 Strings 映射到 Vectors 或其他可以容纳任意数量整数的数据结构。

然而,值得注意的是,诸如 Structs 和 类 之类的东西是旨在组织代码的语言的组件。构造组相关数据; 类 对相关数据组及其相关行为进行建模。没有它们当然可以做所有事情,但这会导致一些非常难以阅读的代码。

行数和是否使用 classes/structs 是衡量代码复杂性和可读性的不良指标。而且它们提供的模块化远远超过取消引用这些值的分钟运行成本。

您应该将您的地图声明为 std::map<std::string, std::vector<unsigned int>>,这样您的索引就可以有一个值向量。

word["with"] = 16, 6, 15;//这个用法是错误的

std::multimapstd::unordered_multimap 应该适合你。

如果你定义word如下:

std::multimap<std::string,int> word;

您应该如下所示插入要映射的值:

std::string key="with";

word.insert(std::pair<std::string,int>(key,16));
word.insert(std::pair<std::string,int>(key,6));
word.insert(std::pair<std::string,int>(key,15));


for( auto &x : word)
  std::cout<<x.first<<" " << x.second<<"\n";    

正如 user4581301 在评论中指出的那样,如果您启用了 C++11 编译器,则可以将值插入 std::multimap,如下所示:

    word.emplace("with",16);
    word.emplace("with",6);
    word.emplace("with",15);

演示:http://coliru.stacked-crooked.com/a/c7ede5c497172c5d

使用 C++ 映射保存多个整数值的示例:

#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main(){
    std::map<int, std::vector<int> > mymap2;
    std::vector<int> myvector;
    myvector.push_back(8);
    myvector.push_back(11);
    myvector.push_back(53);
    mymap2[5] = myvector;
    cout << mymap2[5][0] << endl;
    cout << mymap2[5][1] << endl;
    cout << mymap2[5][2] << endl;
}

打印:

8
11
53

只需将 int 数据类型替换为字符串,您就应该能够将字符串映射到数字列表。