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