我正在为C ++项目开发一个标记系统。我需要一个系统,其中地图存储以下键值信息:
word["with"] = 16, 6, 15;
其中[“with”]是索引,3元组(16,6,15)是索引的值。我已经尝试了地图,但是我一直遇到语义错误,我理解这是因为无法提供超过1个值的密钥。
我尝试过多张地图,但我似乎无法获得满足我需求的语法?
我想避免使用Structs或Classes,因为这个数据库已经包含200个单词,而且我试图让我的代码行保持可读性和最小化。
我该怎么做?我错过了什么吗?你会如何声明这样的系统?
答案 0 :(得分:1)
您应该将地图声明为std::map<std::string, std::vector<unsigned int>>
,这样您就可以获得索引的值向量。
答案 1 :(得分:0)
您可以制作一张地图,将Strings
映射到Vectors
或其他一些可以包含任意数量整数的数据结构。
值得注意的是,Structs和Classes之类的东西是用于组织代码的语言的组件。结构组相关数据;类模拟相关数据组及其相关行为。如果没有它们,它当然可以做任何事情,但这会产生一些非常难以理解的代码。
行数以及是否使用类/结构对于代码的复杂性和可读性而言都是很差的指标。它们提供的模块化远远超过了解除引用这些值的每分钟运行时间成本。
答案 2 :(得分:0)
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";
正如用户4581301在注释中指出的那样,如果您启用了C ++ 11编译器,则可以将值插入std::multimap
,如下所示:
word.emplace("with",16);
word.emplace("with",6);
word.emplace("with",15);
答案 3 :(得分:0)
Example for using C++ maps to hold multiple integer values:
#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;
}
Prints:
8
11
53
Just replace the int datatypes with a string and you should be able to map strings to lists of numbers.