我有一个结构,其中数据定义为:
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
前面显示相应的数据排序的名称)。有没有简单的方法?
答案 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
您只需要为类型定义比较运算符'<'。