gpt4 book ai didi

c++ - 自定义排序 C++ 列表

转载 作者:行者123 更新时间:2023-11-27 23:42:15 25 4
gpt4 key购买 nike

//
// TemplateArray.cpp
// C++
//
// Created by FatJoe on 03/12/2018.
// Copyright © 2018 FatJoe . All rights reserved.
//

#include <stdio.h>
#include <iostream>

/*

This code demonstrates representing an array and array adder using objects
Overloading the [] operator

*/

#include<list>
#include <map>

using namespace std;

class person{

public:
int i;
person(int j):i(j){}


};

class comparer{

public:
bool operator()(const person& first, const person& second)const{
cout << "operator() called" << endl;
return true;
};
};

int main(){

list<person> personlist;
list<person>::iterator itr = personlist.begin();
personlist.insert(itr,person(1));
personlist.insert(itr,person(2));
personlist.insert(itr,person(3));


for(itr=personlist.begin(); itr!=personlist.end(); itr++){
cout << (*itr).i << "Person no." << endl;
};

personlist.sort(comparer());


for(itr=personlist.begin(); itr!=personlist.end(); itr++){
cout << (*itr).i << "Person no." << endl;
};

personlist.sort(comparer());


for(itr=personlist.begin(); itr!=personlist.end(); itr++){
cout << (*itr).i << "Person no." << endl;
};


return 0;
}

我正在尝试编写我自己的排序标准,我正在测试我自己的一些代码。

在我的比较器仿函数中,我返回 true,这意味着第一个参数将与第二个参数交换。

但是,我很难理解如果列表中有 3 个元素,为什么比较器仿函数被调用 3 次,肯定是比较(1,2)然后比较(2,3)?

最佳答案

除了n log n 复杂度之外std::list 的排序算法未指定。您需要查看您正在使用的任何运行时库的源代码,以了解它是如何实现的。您应该能够使用调试器单步执行代码。

因为你的比较函数不符合 Compare 的规范你的代码有未定义的行为。

关于c++ - 自定义排序 C++ 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53665476/

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