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 中重新检查函数,看来它只能处理int,double,long ...但是无法使用此函数sort()
对字符串进行排序。
那么我该如何排序字符串?
std :: stort需要随机访问 iterators std :: set 仅提供 biDirectional iterators。
一般来说,任何试图对 std :: Set 进行排序与此容器的设计相矛盾,因为它以排序顺序存储其元素。
来自cppreference.com:
std :: set是一个关联容器,包含排序集合 类型键的唯一对象。
您无法求助于集合,它如何分类是特定集合类型的一部分。给定的集合具有无法更改的固定设置顺序。
您可以相对容易地创建具有相同数据的新集合。只需创建一个基于新标准的新集合即可。
如果要在同一代码中使用两组,则必须抽象对基础集的访问。
使用std :: sorts sorts sorts进行分类集。更改您的容器。
您只是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 。
相关文章:
- 在 c++ 中拥有一组结构的正确方法是什么?
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 一组值的零开销下标运算符
- 使用一组结构,避免在一组结构中出现重复的结构
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 合并一组模板专用化
- 如何更好地检查两个 char 变量是否在一组值中?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 给定一个枢轴点,按照它们与枢轴点构成的角度递增顺序对一组点进行排序
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 读取一组用户输入,按升序排序,然后打印结果
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- C 排序无法排序一组字符串
- 如何在c++中使用两个排序标准(对于一组对)创建有序集
- 如何按距点的距离(x1,y1)升序对一组坐标进行排序
- 对一组数字进行排序的最快数据结构(和排序算法)是什么
- 如何使用bucket排序对一组字符串进行排序
- 合并排序-一个数组中有四个排序部分
- 排序一个数组和后面的其他数组