将地图的第一个和第二个值上传到矢量对的第一个和第二个值

时间:2014-02-01 02:03:28

标签: c++ vector maps

好的,所以我从标题中知道我的问题听起来与其他问题相似,而且确实如此。但是我的问题是如此略有不同,并且由于某种原因,当我搜索网络并尝试其他人的方式时,我一直都会遇到错误。我有一个map(char,int),它由一堆字符和它们出现在未知字符串中的次数组成。我的程序正在计算和添加字符&对map(char,int)的整数就好了。我遇到的麻烦是将这些值上传到一个向量(pair(char,int))1 1,所以我最终可以按它们的存储值而不是它们的键值对它们进行排序。这是我的代码的重要部分。

int test2=0;

//my map is charCount and my vector is charVector

for (map<char, int>::iterator char_it = charCount.begin(); char_it != charCount.end();
++char_it) {

    charVector[test2].first = char_it->first;
    charVector[test2].second = char_it->second;
    test2++;

} 

我认为for循环甚至没有完成,我不知道为什么。我甚至尝试了一个for循环(没有迭代器),以便将maps.first和maps.second值1上传1。似乎没有什么工作。我不知道为什么我无法理解,但我不能

1 个答案:

答案 0 :(得分:0)

问题可能是vector为空,operator[]没有提供任何边界检查(但成员函数at()却没有。)如果你要使用{{1相反,它会抛出一个很好的at()错误。有了这个假设,我建议你使用std::out_of_range向你的向量中添加元素:

push_back

如果map<char, int> charCount = { { 'a', 1 }, { 'b', 2 }}; vector<pair<char, int>> charVector; for (map<char, int>::iterator char_it = charCount.begin(); char_it != charCount.end(); ++char_it) { charVector.push_back(make_pair(char_it->first, char_it->second)); } for (unsigned int i = 0; i < charVector.size(); i++) std::cout << charVector[i].first << " " << charVector[i].second << "\n"; 不是空的,并且确实存在一对一的对应关系,那么我建议使用vector,以便在超出界限时获得异常。

at()