3

用 C++ 编写的代码

环境:微软Visual Studio

我有一个地图矢量。首先,我想遍历第一个映射,获取它的“第一个”和“第二个”并将它们保存在我构建的其他结构中(向量映射)。然后我将遍历我的“地图矢量”中的左侧地图并做同样的事情......

这是我的地图矢量:

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' 循环应该遍历向量中的第一个映射。我声明了一个地图迭代器,因为我需要它来遍历地图!正确的?为什么它不起作用?

错误:

IntelliSense:没有运算符“=”与这些操作数匹配

非常感谢 !!!


好的,现在我确定了这个迭代器:

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会产生错误:

IntelliSense:没有运算符“=”与这些操作数匹配

它和之前的错误一样,所以我猜这是一个类似的问题。是吗?

编辑:更清楚地说,我想做的是将const myvec& the_vec添加到我的索引的“i”位置(在本例中为“0”)。

再次 :

typedef vector<map<string,unsigned int>> myvec;
typedef map<string,vector<unsigned int>> index;

谢谢!

4

3 回答 3

7

the_vec作为对常量的引用传递,因此您需要const_iterator

map<string,unsigned int>::const_iterator map_iter;
于 2012-08-17T12:42:15.007 回答
0

要回答您的第二个问题,您不能修改地图中的键,因为它们需要保持有序。如果要替换索引中的所有元素,那么最好先清除它,然后添加新元素:

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);
}
于 2012-08-17T15:26:54.450 回答
0

这是一种遍历map包含 s 的键和s 的strings 值的a 的方法:vectorstring

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;
    }
}

希望这对将来的人有所帮助

于 2013-08-06T16:43:20.853 回答