C++编写的代码
环境:Microsoft视觉工作室
我有一个地图矢量。首先,我想遍历第一张地图,得到它的"第一个"和"第二个",并将它们保存在我构建的其他结构(向量图)中。然后我将在我的"地图矢量"中遍历左侧地图并执行相同的操作......
这是我的地图矢量:
typedef vector<map<string,unsigned int>> myvec;
这是应该完成这项工作的函数:
void Coogle::make_index(const myvec& the_vec)
{
//SCAN THE FIRST MAP
map<string,unsigned int>::iterator map_iter;
index::iterator idx_iter = the_index.begin();
for(map_iter=the_vec[0].begin(); map_iter!=the_vec[0].end(); ++map_iter)
{
}
}
"for"循环应该遍历向量中的第一个映射。我声明了一个地图迭代器,因为我需要它来迭代地图!右?为什么它不起作用?
错误:
智能感知:没有运算符"="与这些操作数匹配
多谢!!!
好的,现在我确定了这个迭代器:
index::iterator idx_iter = the_index.begin();
这是我的"索引":
typedef map<string,vector<unsigned int>> index;
在提到的"for"循环中,我做了以下操作:
for(map_iter=the_vec[0].begin(); map_iter!=the_vec[0].end(); ++map_iter)
{
/*#1*/ idx_iter->first = map_iter->first;
/*#2*/ idx_iter->second[0] = map_iter->second;
/*#3*/ idx_iter++;
}
#2似乎还可以。但是 #1 会生成一个错误:
智能感知:没有运算符"="与这些操作数匹配
这与以前的错误相同,所以我猜这是一个类似的问题。是吗?
编辑:为了更清楚,我想做的是从const myvec&the_vec添加到我的索引中的"i"位置(在本例中为"0")。
再:
typedef vector<map<string,unsigned int>> myvec;
typedef map<string,vector<unsigned int>> index;
谢谢!
the_vec
作为对常量的引用传递,因此您需要const_iterator
:
map<string,unsigned int>::const_iterator map_iter;
要回答第二个问题,您无法修改地图中的键,因为它们需要保持有序。如果要替换索引中的所有元素,那么最好先清除它,然后添加新元素:
the_index.clear();
for(map_iter=the_vec[0].begin(); map_iter!=the_vec[0].end(); ++map_iter)
{
the_index[map_iter->first].push_back(map_iter->second);
}
下面是一种循环访问包含 string
s 键和 vector
s string
s 值的map
的方法:
for( map<string, vector<string>>::iterator ii = timeZonesMap.begin(); ii != timeZonesMap.end(); ++ii)
{
cout << ii->first << ": " << endl;
for(std::vector<string>::iterator it = ii->second.begin(); it != ii->second.end(); ++it) {
std::cout << *it << endl;
}
}
希望这对将来的某人有所帮助