对结构向量进行排序c

时间:2020-08-27 04:09:51

标签: c++ vector struct

我有一个结构,其中数据定义为:

typedef struct contacts 
{
    string name;
    string nickName;
    string phoneNumber;
    string carrier;
    string address;
    //callDetails callDetails;

} contactDetails;

vector <contactDetails> proContactFile;

我喜欢向量中有10 -20个信息字段。 我需要对name(按字母顺序)进行冒泡排序,并在名称的前面显示其他数据。(例如,在对名称进行排序之后,我想在nickname , phone number ,carrieraddress前面显示相应的数据排序的名称)。有没有简单的方法?

2 个答案:

答案 0 :(得分:5)

了解“ 自定义比较器”将解决您的问题。这是获得所需结果的一种方法。我使用cmp作为自定义比较器。请注意,它是在调用sort()时传递的。

如果您明天需要根据其他内容进行排序,例如phoneNumber,这种方法很有用。您唯一需要做的更改是向return c1.phoneNumber < c2.phoneNumber;

添加或更新比较器函数。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

typedef struct contacts
{
    string name;
    string nickName;
    string phoneNumber;
    string carrier;
    string address;
    //callDetails callDetails;
} contactDetails;

//sort based on name
bool cmp (const contacts& c1, const contacts& c2) {
    return c1.name < c2.name;
}

void print(vector <contactDetails> proContactFile) {
    for (auto s : proContactFile) {
        cout << s.name << " " << s.nickName << " " << s.phoneNumber << " " << s.carrier << " " << s.address << endl;
    }
}

int main()
{
    vector <contactDetails> proContactFile;

    proContactFile.push_back({"name1","nickName1","phone1","carrier1", "address1"});
    proContactFile.push_back({ "ame1","ickName1","hone1","arrier1", "ddress1" });
    proContactFile.push_back({ "me1","ckName1","one1","rrier1", "dress1" });
    proContactFile.push_back({ "e1","kName1","ne1","rier1", "ress1" });

    sort(proContactFile.begin(), proContactFile.end(), cmp);
    print(proContactFile);
}

答案 1 :(得分:0)

您尝试过标准模板库吗?

#include <algorithm>
#include <functional>
#include <array>
#include <iostream>
 
int main()
{
    std::array<int, 10> s = {4, 7, 6, 3, 9, 2, 1, 0, 8, 3}; ; 
 
    // sort using the default operator<
    std::sort(s.begin(), s.end());
}

请参阅:https://en.cppreference.com/w/cpp/algorithm/sort

您只需要为类型定义比较运算符'<'。