尝试在排序后保持年龄/名称对匹配

Ale*_*lex 2 c++

我正在编写一个程序,用户输入名称然后老化.然后程序按字母顺序对列表进行排序并输出对.但是,我不确定在按字母顺序排序之后如何保持年龄与名称相匹配.我到目前为止所有的一切都是......

编辑:将代码更改为此 -

#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)


ava*_*kar 5

除了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如果您决定动态添加/删除人员,会更快.