谢谢你的C 中的解决方案,
现在我想使用 std::sort 和向量在 C++ 中实现这一点:
typedef struct
{
double x;
double y;
double alfa;
} pkt;
vector< pkt > wektor;
使用push_back()填充;比较功能:
int porownaj(const void *p_a, const void *p_b)
{
pkt *pkt_a = (pkt *) p_a;
pkt *pkt_b = (pkt *) p_b;
if (pkt_a->alfa > pkt_b->alfa) return 1;
if (pkt_a->alfa < pkt_b->alfa) return -1;
if (pkt_a->x > pkt_b->x) return 1;
if (pkt_a->x < pkt_b->x) return -1;
return 0;
}
sort(wektor.begin(), wektor.end(), porownaj); // this makes loads of errors on compile time
什么是要纠正?在这种情况下如何正确使用 std::sort ?
std::sort
采用与中使用的不同的比较函数qsort
。该函数不应返回 –1、0 或 1,而是返回bool
指示第一个元素是否小于第二个元素的值。
你有两种可能性:实施operator <
为您的物品;在这种情况下,默认sort
没有第三个参数的调用将起作用;或者你可以重写上面的函数来完成同样的事情。
请注意,您必须在参数中使用强类型。
此外,最好不要在这里使用函数。相反,使用函数对象。这些都受益于内联。
struct pkt_less {
bool operator ()(pkt const& a, pkt const& b) const {
if (a.alfa < b.alfa) return true;
if (a.alfa > b.alfa) return false;
if (a.x < b.x) return true;
if (a.x > b.x) return false;
return false;
}
};
// Usage:
sort(wektor.begin(), wektor.end(), pkt_less());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)