代码之家  ›  专栏  ›  技术社区  ›  warwcat

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

  •  0
  • warwcat  · 技术社区  · 9 年前

    我做了这个程序,假设在一个向量上保存字符串对,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 回复  |  直到 9 年前
        1
  •  1
  •   5gon12eder    9 年前

    这条线

    vsi v(10);
    

    为您创建 std::vector 填充10个默认构造 std::pair<std::string, int> s、 即空字符串和零。

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

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

    这是我从你提供的信息中所能猜到的。我不知道你想用这段代码完成什么。

    尝试类似的操作

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

    打印矢量的所有元素 v .