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

vector accessing non zero elements but output as zero

我做了这个程序,假设在一个向量上保存成对的字符串,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;
}

这一行

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