我认为您对某些语法和编程语言以及标准库容器的语义有一点误解。我会解释我认为你做错了什么。
首先,您有一个名为point 的string 对象向量,这是一个对象,而不是类型。一个对象就是一个类型的变量,例如
string name = "curious";
这里的name是一个类型/类string的对象,所以你不能输入point作为map的模板参数,你必须输入一个类型。所以应该是string。
第二件事是您正在使用逗号运算符,我不确定您是否知道您正在这样做。逗号操作符的作用如下
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
int main() {
cout << ("Hello", "World") << endl;
return 0;
}
^ 这将产生一个编译器错误,因为没有使用“Hello”,但关键是逗号运算符计算表达式的第一部分,然后返回右边的内容;所以这将打印出来
World
第三件事是你如何遍历地图。当您在 C++ 中遍历 std::map 时,您实际上是在遍历一系列 std::pairs 所以下面的代码
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <map>
using std::map;
int main() {
map<string, int> map_string_int {{"curious", 1}, {"op", 2}};
for (auto iter = map_string_int.begin(); iter != map_string_int.end();
++iter) {
cout << iter->first << " : " << iter->second << endl;
}
return 0;
}
将产生以下输出
curious : 1
op : 2
键将按字母顺序排列,因为它们存储在二叉搜索树中 (https://en.wikipedia.org/wiki/Binary_search_tree)
现在我想你想要一个从 string 对象到 vectors 的映射,所以你可以这样构建你的代码
std::vector<string> point
std::map<string, std::vector<string>> alloc;
alloc["a"] = {"call", "call1"};
alloc["i"] = {"call"};
你会像这样遍历它
for (auto iter = alloc.begin(); iter != alloc.end(); ++iter) {
cout << iter->first << " : " << iter->second << endl;
}
你会像这样遍历alloc["a"]
// sanity check
assert(alloc.find("a") != alloc.end());
for (auto iter = alloc["a"].begin(); iter != alloc["a"].end(); ++iter) {
cout << *iter << endl;
}
希望有所帮助!