矢量访问非零元素但输出为零

时间:2015-07-30 15:57:39

标签: c++11 vector std-pair

我做了这个程序,假设在一个向量上保存字符串对,int并在向量上打印最大数字的字符串 但是当我试图找到这个字符串时没有出现任何内容,所以我尝试在向量上打印int的所有值,虽然找到了最大值10,但是向量中的所有值都打印为0.有人可以解释它是否发生了我怎么样可以访问这些值。

#include <iostream>
#include <utility>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

typedef vector<pair<string,int>> vsi;

bool paircmp(const pair<string,int>& firste,const pair<string,int>&    seconde );

int main(int argc, char const *argv[]) {
 vsi v(10);

 string s;
 int n,t;

 cin>>t;

 for (size_t i = 0;i < t;i++) {
  for (size_t j = 0; j < 10; j++) {
   cin>>s>>n;
   v.push_back(make_pair(s,n));
  }
  sort(v.begin(),v.end(),paircmp);
  int ma=v[v.size()-1].second;
  cout<<ma<<endl;
  for (size_t j = 0; j < 10; j++) {
   cout << v.at(j).second  <<endl;
   if(v[j].second == ma)

   cout<<v[j].first<<endl;

  }

 }





return 0;
}

bool paircmp(const pair<string,int>& firste,const pair<string,int>& seconde ){
 return firste.second < seconde.second;
}

1 个答案:

答案 0 :(得分:1)

这一行

vsi v(10);

为您创建一个std::vector,其中包含10个默认构造的std::pair<std::string, int>。也就是说,一个空字符串和零。

然后你push_back向量的其他值,但它们碰巧在这十个初始元素之后排序,可能是因为它们都有正int个。

因此,打印前十个元素的first成员会打印十个空字符串。

这是我能从你所提供的内容中猜出来的。我不知道你要用这​​段代码完成什么。

尝试类似

的内容
for (const auto& item : v)
  {
    std::cout << "{ first: '" << item.first << "', "
              << "second: " << item.second << " }\n";
  }

打印向量v的所有元素。