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

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

本文关键字:整数 保存 何使用 映射 C++      更新时间:2023-10-16

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

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

其中["with"]是索引,三元组(16,6,15)是索引的值。我尝试过映射,但不断出现语义错误,据我所知,这是因为无法给出大于1的键值。

我尝试了多映射,但似乎无法获得适合我需要的语法?

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

我该怎么做?我是不是错过了什么?你会如何声明这样的系统?

您应该将映射声明为std::map<std::string, std::vector<unsigned int>>,这样您就可以为索引创建一个值向量。

您可以制作一个映射StringsVectors的映射,或者其他可以容纳任意数量整数的数据结构。

然而,值得注意的是,像结构和类这样的东西是用来组织代码的语言的组成部分。构造与组相关的数据;类对相关数据组及其相关行为进行建模。没有它们当然可以做任何事情,但这会导致一些非常不可读的代码。

行数和是否使用类/结构是衡量代码复杂性和可读性的较差指标。它们提供的模块性远远超过了取消引用这些值的分钟运行成本。

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

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

若你们定义这个词如下:

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数据类型替换为字符串,就可以将字符串映射到数字列表。