C++ 排序无法对字符串集进行排序?

C++ sort cannot sort set of strings?

我想知道如何对包含字符串的集合进行排序。比如我有一组:

std::set<std::string> setA = {"B","A","C"}

然后我想用这个来做排序:

std::sort(setA.begin(),setA.end());

但是C++编译器不能让它通过。错误消息报告:

40: error: invalid operands to binary expression
('std::__1::__tree_const_iterator<std::__1::basic_string<char>, std::__1::__tree_node<std::__1::basic_string<char>, void *> *, long>'
and 'std::__1::__tree_const_iterator<std::__1::basic_string<char>, std::__1::__tree_node<std::__1::basic_string<char>, void *> *, long>')
difference_type __len = __last - __first;

然后我重新检查了C++中的sort函数,好像只能处理int, double, long ...但是没办法用这个函数sort()对字符串进行排序。

那么如何对字符串进行排序?

您不能对集合进行排序,它的排序方式是特定集合类型的一部分。给定的集合具有固定的集合顺序,无法更改。

您可以相对轻松地使用相同数据创建新集。只需创建一个根据新标准排序的新集合。

如果您想在同一代码中使用这两个集合,则必须抽象化对底层集合的访问。

Sorting Sets using std::sort 无耻地复制。改变你的容器。

你只需 insert 这三个字符串,如果你使用 std::set

,它们已经排序
set<string> s;
s.insert("A");
...
OR
set<string> str = {"A", "B", "C", "D"}; //C++ 11
OR
string s[] = {"A", "B", "C", "D"};
set<string> str(s, s+ sizeof(s) / sizeof(s[0]));

And they are sorted.

如果您想要自定义排序(您可能就是这种情况?)

然后使用vector<string>()sort()

bool cmp(string a, string b)
{
    // do something and return boolean
}
vector<string> v;
v.push_back("s");
...

sort(v.begin(),v.end(),cmp);

顺便说一句,你不能求助于 set,因为它的元素的排序完全取决于集合的标准实现,就像在 c++ 中所做的那样。

std::sort需要随机访问迭代器,而std::set只提供双向[=23] =]迭代器。

一般来说,任何对 std::set 进行排序的尝试都与此容器的设计相矛盾,因为它按排序顺序存储其元素。

来自cppreference.com

std::set is an associative container that contains a sorted set of unique objects of type Key.