我正在编写一个程序,用户输入名称然后老化.然后程序按字母顺序对列表进行排序并输出对.但是,我不确定在按字母顺序排序之后如何保持年龄与名称相匹配.我到目前为止所有的一切都是......
编辑:将代码更改为此 -
#include "std_lib_facilities.h"
struct People{
string name;
int age;
};
int main()
{
vector<People>nameage;
cout << "Enter name then age until done. Press enter, 0, enter to continue.:\n";
People name;
People age;
while(name != "0"){
cin >> name;
nameage.push_back(name);
cin >> age;
nameage.push_back(age);}
vector<People>::iterator i = (nameage.end()-1);
nameage.erase(i);
}
Run Code Online (Sandbox Code Playgroud)
我得到了!=运算符和cin运算符的编译器错误.不知道该怎么办.
luk*_*uke 11
而不是两个向量(一个用于名称,一个用于年龄),而是具有包含两者的新类型的向量:
struct Person
{
string name;
double age;
};
vector<Person> people;
Run Code Online (Sandbox Code Playgroud)
编辑评论:
请记住你现在正在推动矢量.你必须推送Person类型的东西.您可以通过以下几种方式执行此操作:
推回默认构造人员,然后设置名称和年龄字段:
people.push_back(Person());
people.back().name = name;
people.back().age = age;
Run Code Online (Sandbox Code Playgroud)
给Person一个带有名称和年龄的构造函数,并向Person推送一些值:
struct Person
{
Person(const string& name_, double age_) : name(name_), age(age_) {}
string name;
double age;
};
people.push_back(Person(name, age));
Run Code Online (Sandbox Code Playgroud)
创建一个Person,给它一些值,并将其推送到向量中:
Person person;
person.name = name;
person.age = age;
people.push_back(person);
Run Code Online (Sandbox Code Playgroud)
或者更简单:
Person person = { name, age };
people.push_back(person);
Run Code Online (Sandbox Code Playgroud)
(感谢avakar)
除了jeje和luke发布的解决方案之外,您还可以将对插入map(或者multimap,如果允许重复的名称).
assert(names.size() == ages.size());
map<string, double> people;
for (size_t i = 0; i < names.size(); ++i)
people[names[i]] = ages[i];
// The sequence [people.begin(), people.end()) is now sorted
Run Code Online (Sandbox Code Playgroud)
请注意,vector<person>如果您只提前填写一次,使用会更快.map如果您决定动态添加/删除人员,会更快.
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |