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

Posted

技术标签:

【中文标题】将地图的第一个和第二个值上传到向量对的第一个和第二个值中【英文标题】:uploading 1st and 2nd values of a map into the 1st and 2nd values of a vector pair 【发布时间】:2014-02-01 02:03:27 【问题描述】:

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

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】:

问题可能是vector 为空,并且operator[] 不提供任何边界检查(但是成员函数at() 提供。)如果您要改用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(),这样如果超出范围就会出现异常。

try 
 for (map<char, int>::iterator char_it = charCount.begin(); char_it != charCount.end();
 ++char_it) 
    charVector.at(test2).first = char_it->first;
    charVector.at(test2).second = char_it->second;
    test2++;
  
 catch(std::out_of_range& ex)

  cout << "Out of range.\n";

【讨论】:

以上是关于将地图的第一个和第二个值上传到向量对的第一个和第二个值中的主要内容,如果未能解决你的问题,请参考以下文章

根据对的第二个值查找对向量的上限

定位类中的第一个和第二个值

如何按第一个值和第二个值对 pair<int, char> 的向量进行排序? [复制]

使用 Python 在每行的第一个和第二个单词后插入逗号?

SQL 他们的第一个订单和第二个订单的购买价值之间的差异

从特定的第一个元素获取向量对的第二个元素