向量访问非零元素但输出为零
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
。
我做了这个程序,假设在一个向量上保存成对的字符串,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
。