如何解决对结构向量进行排序c
我有一个结构,其中数据定义为:
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,carrier
和address
前面显示相应的数据排序的名称)。有没有简单的方法?
解决方法
了解“ 自定义比较器”将解决您的问题。这是获得所需结果的一种方法。我使用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);
}
,
您尝试过标准模板库吗?
#include <algorithm>
#include <functional>
#include <array>
#include <iostream>
int main()
{
std::array<int,10> s = {4,7,6,3,9,2,1,8,3}; ;
// sort using the default operator<
std::sort(s.begin(),s.end());
}
请参阅:https://en.cppreference.com/w/cpp/algorithm/sort
您只需要为类型定义比较运算符'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。