在列表中对对象进行排序并组合值

Sorting objects in a list and Combining values

本文关键字:排序 组合 列表 对象      更新时间:2023-10-16

我有一个 std::list<object>,对象中有6个整数和一个char数组元素。我想用特定的整数对这些对象进行排序(假设整数a),然后,我想将char数组与排序顺序结合。

STL是否具有某种特定分类的方法?如果没有,我该如何处理这种分类?

std::list::sort具有自定义比较器的过载,对于更合适的容器,std::sort也是如此。因此,您可以将其用于排序:

my_list.sort([](object const & o1, object const & o2) {return o1.a < o2.a;});

我不确定您所说的"组合炭数组"是什么意思,但是您可以用std::for_eachstd::transform或简单的循环在排序列表上迭代,以便依次使用每个对象进行操作。

您可以为排序函数提供自己的比较器或实现操作员&lt;对于您的object课程。您可以在这里找到更多信息。请注意使用std::list::sort而不是std::sort

// list::sort
#include <iostream>
#include <list>
#include <string>
#include <cctype>
// comparison, not case sensitive.
bool compare_nocase (const std::string& first, const std::string& second)
{
    unsigned int i=0;
    while ( (i<first.length()) && (i<second.length()) )
    {
        if (tolower(first[i])<tolower(second[i])) return true;
            else if (tolower(first[i])>tolower(second[i])) return false;
        ++i;
    }
    return ( first.length() < second.length() );
}
int main ()
{
    std::list<std::string> mylist;
    std::list<std::string>::iterator it;
    mylist.push_back ("one");
    mylist.push_back ("two");
    mylist.push_back ("Three");
    mylist.sort();
    std::cout << "mylist contains:";
    for (it=mylist.begin(); it!=mylist.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << 'n';
    mylist.sort(compare_nocase);
    std::cout << "mylist contains:";
    for (it=mylist.begin(); it!=mylist.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << 'n';
  return 0;
}