排序包含圆圈的列表
sorting a list containing circles c++
我想运行这个简单的代码:
#include <cstdlib> //std :: rand ()
#include <vector> //std::vector<>
#include <list> //std::list<>
#include <iostream> //std::ostream_iterator
#include <iterator> //std:: cout std::ostream_iterator
#include <algorithm> //std::reverse, std::generate
#include <map>
#include "ColorRGB.hpp"
#include "point2d.hpp"
#include "circle.hpp"
#include <cmath>
int main(){
std::list<Circle>lk;
Point2d a(7.5,3.2);
Point2d b(6.5,2.2);
Point2d c(5.5,1.2);
ColorRGB d(0, 0, 0);
ColorRGB e(0, 1, 1);
ColorRGB f(1, 1, 0);
Circle c1(a, 2, d);
Circle c2(b, 1, e);
Circle c3(c, 0.4, f);
lk.push_back(c1);
lk.push_back(c2);
lk.push_back(c3);
sort(lk.begin(), lk.end(), [] (Circle const& lhs,Circle const& rhs)
->bool{return(lhs.getrad() <= rhs.getrad())};
return 0;
}
但是得到编译消息:
Juliuss-MacBook-Pro-2:uebung4 JONG$ g++ -o 4_1 4_1.cpp
4_1.cpp:42:30: error: expected expression
sort(lk.begin(), lk.end(), [] (Circle const& lhs,Circle const& r...
^
1 error generated.
不能使用std::sort
对list
进行排序,因为std::sort
需要随机访问迭代器,而list
只有双向迭代器。
使用vector
代替。或者,如果坚持使用list,则有一个名为list.sort()
的成员函数。它也可以接受自定义比较器。
相关问题/答案在这里
同样,在问题中使用SSCCE。这意味着要尽可能地摆脱/提供自定义类的代码。
括号中也有错误。这是一个自包含的代码,也可以编译。它显示了std::sort
和vector
以及list::sort
函数的用法:
#include <list>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
class Circle
{
int r;
public:
Circle(int r) : r(r) {}
int getrad() const { return r; }
};
int main(){
std::vector<Circle> vk;
std::list<Circle> lk;
Circle c1(2);
Circle c2(1);
Circle c3(3);
vk.push_back(c1);
vk.push_back(c2);
vk.push_back(c3);
lk.push_back(c1);
lk.push_back(c2);
lk.push_back(c3);
std::sort(vk.begin(), vk.end(),
[] (const Circle& lhs, const Circle& rhs) -> bool {
return lhs.getrad() < rhs.getrad();
});
lk.sort(
[] (const Circle& lhs, const Circle& rhs) -> bool {
return lhs.getrad() < rhs.getrad();
});
return 0;
}
我还是推荐vector
。
OPs更新后:
正如@nwp指出的,如果使用lambas,请使用c++ 11编译器:
g++ -std=c++11 -Wall -Wextra filename.cpp
正如@WhozCraig所指出的,比较器也需要修复。
相关文章:
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- 范围 v3 可以包含初始值设定项列表的工作吗?
- 链接列表在 cpp 中包含不同的对象类
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 如何将包含括号的字符串列表平展为单个列表?
- 如何在两个列表中比较和获取非包含值
- 给定一个源文件,有没有办法要求 gcc 返回仅直接包含的头文件的列表?
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- C++:如何初始化包含具有给定键的指针列表的映射
- 遍历列表包含排除最后一个元素的内容
- 如何在C++中创建 2d 数组,其中一部分包含循环计数器,另一部分包含数字列表?
- 对列表类中的泛型方法禁用编译器警告 2100,该泛型方法可能包含指针,也可能不包含指针
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 包含每个 k 个列表中至少 1 个元素的最小元素范围的时间复杂度
- 不带初始值设定项的构造函数列表,其中包含带有已删除构造函数的对象
- 如何在两个包含指针的地图中创建列表
- 如何对其中包含地图的列表进行排序
- 当此列表包含父列表时,如何遍历列表,它使用标准列表