STL容器中的有序排序

很抱歉,如果问题标题的术语是错误的,但是这就是我想要做的。我需要对对象的向量进行排序,但是与典型的 “小于”比较方法相反,我需要根据一些字符串重新放置对象ID属性,以便每个相同类型的成员按连续的顺序放置,如下所示:

[id_town,id_country,id_planet,id_planet,id_town,id_country]

变成这个:

[id_town,id_town,id_country,id_country,id_planet,id_planet]

id_属性是字符串。

回答:

std::sort具有第三个参数,可用于传递充当自定义比较器的布尔谓词。

例如:

struct foo

{

std::string id;

foo(const std::string& _id) : id( _id ) {}

};

//Functor to compare foo instances:

struct foo_comparator

{

operator bool(const foo& lhs , const foo& rhs) const

{

return lhs.id < rhs.id;

}

};

int main()

{

std::vector<foo> v;

std::sort( std::begin(v) , std::end(v) , foo_comparator );

}

另外,在C ++ 11中,您可以使用lambda:

std::sort( std::begin(v) , std::end(v) , [](const foo& lhs , const foo& rhs) { return lhs.id < rhs.id; } );

最后,您还可以重载比较运算符(operator>operator<),并使用标准库提供的比较器,例如std::greater

struct foo

{

std::string id;

foo(const std::string& _id) : id( _id ) {}

friend bool operator<(const foo& lhs , const foo& rhs)

{

return lhs.id < rhs.id;

}

friend bool operator>(const foo& lhs , const foo& rhs)

{

return rhs < lhs;

}

friend bool operator>=(const foo& lhs , const foo& rhs)

{

return !(lhs < rhs);

}

friend bool operator<=(const foo& lhs , const foo& rhs)

{

return !(lhs > rhs);

}

};

int main()

{

std::vector<foo> v;

std::sort( std::begin(v) , std::end(v) , std::greater );

}

以上是 STL容器中的有序排序 的全部内容, 来源链接: utcz.com/qa/407244.html

回到顶部