gpt4 book ai didi

c++ - 在 C++ 中按字母顺序对对象列表进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:37:10 24 4
gpt4 key购买 nike

我正在尝试创建一个函数来按名称或姓氏对地址簿中的联系人列表进行排序。

 void sortList (list<Contact> & address_book){

//define two iterators - first to point to the first element from the list, second to the second element
list<Contact>::iterator it = address_book.begin();
list<Contact>::iterator it2 = address_book.begin();
it2++;

//get the last name for the first 2 contacts
string last_name1 = it->get_last_name();
string last_name2 = it2->get_last_name();

int i = 0;

while (i < last_name1.length() && i < last_name2.length()){

if (last_name1[i] < last_name2[i]){
swap(it, it2);
break;
}

}
}

我确定我做的不正确,但我对这些迭代器有点迷茫。我也知道我应该有另一个 while 循环来遍历我所有的联系人,直到所有联系人都被排序,但老实说,我不知道如何实现它。

最佳答案

std::list 有一个重载的成员函数 sort,即

Sorts the elements in ascending order. The order of equal elements is guaranteed to be preserved. The first version uses operator< to compare the elements, the second version uses the given comparison function comp.

要提供比较功能,您可以使用仿函数:

struct sort_by_name {
bool operator()(const Contact &a, const Contact &b)
{ return a.get_name() < b.get_name(); }
};
struct sort_by_last_name {
bool operator()(const Contact &a, const Contact &b)
{ return a.get_last_name() < b.get_last_name(); }
};

或更简单的免费函数

bool cmp_by_name(const Contact &a, const Contact &b)
{ return a.get_name() < b.get_name(); }
bool cmp_by_last_name(const Contact &a, const Contact &b)
{ return a.get_last_name() < b.get_last_name(); }

你也可以这样调用它

 address_book.sort(sort_by_name());
address_book.sort(sort_by_last_name());

 address_book.sort(cmp_by_name);
address_book.sort(cmp_by_last_name);

访问器 get_name() 和 get_last_name() 必须是常量。

关于c++ - 在 C++ 中按字母顺序对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9423480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com