C++,如何使用映射来保存多个整数值
C++, How to use maps for holding multiple integer values
我正在为一个C++项目开发一个单词标记系统。我需要一个地图存储以下键值信息的系统:
word["with"] = 16, 6, 15;
其中["with"]是索引,三元组(16,6,15)是索引的值。我尝试过映射,但不断出现语义错误,据我所知,这是因为无法给出大于1的键值。
我尝试了多映射,但似乎无法获得适合我需要的语法?
我想避免使用Structs或Classes,因为这个数据库已经包含了200个单词,我正在努力保持我的代码行可读性,而且太少了。
我该怎么做?我是不是错过了什么?你会如何声明这样的系统?
您应该将映射声明为std::map<std::string, std::vector<unsigned int>>
,这样您就可以为索引创建一个值向量。
您可以制作一个映射Strings
到Vectors
的映射,或者其他可以容纳任意数量整数的数据结构。
然而,值得注意的是,像结构和类这样的东西是用来组织代码的语言的组成部分。构造与组相关的数据;类对相关数据组及其相关行为进行建模。没有它们当然可以做任何事情,但这会导致一些非常不可读的代码。
行数和是否使用类/结构是衡量代码复杂性和可读性的较差指标。它们提供的模块性远远超过了取消引用这些值的分钟运行成本。
word["with"] = 16, 6, 15;
//这种用法是错误的
std::multimap
或std::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数据类型替换为字符串,就可以将字符串映射到数字列表。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 在模型中保存整数的方法,与QStyledItemDelegate兼容
- 在 c++ 的数组中保存子整数
- 将浮点数保存到整数中,而不会丢失浮点精度
- 如何保存用户的整数输入,并返回字符串值?
- 保存未知数量的整数,而不会花费太多时间/内存
- 保存一组整数的最佳方法
- C++从文件中读取整数并保存到数组中
- overflow_error在运行时捕获 C++ 当整数变量无法保存它不应该保存的值时
- 如何在C++中保存大于 64 位的整数
- 如何将.txt文件中的未知数字整数保存到数组中
- 保存当前日期为3个整数- c++
- 从字符串中保存矢量中的整数
- 使用next_permutation函数后如何保存字符串/整数
- 使用OpenCV保存整数CV_32S图像