【问题标题】:Set container dose not sort string array elements correctly设置容器不能正确排序字符串数组元素
【发布时间】:2021-11-27 08:34:40
【问题描述】:

我想知道为什么下面设置的容器代码不能对字符串数组进行排序?

下面代码的结果序列是 {"B","A","C"} 作为输入序列 我希望看到 {"A","B","C"} 或 {"C","B","A"} 代替。

#include<fstream>
#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
#include <set>

using namespace std;


int main()
{
        std::set<char*> cell_name;
        cell_name.clear();
        cell_name = {"B","A","C"};


        std::set <char*>::iterator iter;

        for (iter = cell_name.begin();iter!=cell_name.end();++iter)
            cout << ' ' << *iter;
        cout << '\n';

    return 0;
}

【问题讨论】:

  • std::set&lt;char*&gt;是一组指针,一组字符串是std::set&lt;std::string&gt;

标签: c++ string sorting set containers


【解决方案1】:

std::set 按元素的值对元素进行排序,在您的情况下,元素是指针。你有两个选择:

  • 重制指向std::string的指针
#include<fstream>
#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
#include <set>


int main()
{
        std::set<std::string> cell_name;
        cell_name.clear();
        cell_name = {"B","A","C"};


        std::set <std::string>::iterator iter;

        for (iter = cell_name.begin();iter!=cell_name.end();++iter)
            std::cout << ' ' << *iter;
        std::cout << '\n';

    return 0;
}
  • 提供自定义比较器以将指针考虑在内:
#include<fstream>
#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
#include <set>

struct StrComparator
{
  bool operator()(const char *s1, const char *s2) const
  {
    return strcmp(s1, s2) < 0;
  }
};

int main()
{
        std::set<const char*, StrComparator> cell_name;
        cell_name.clear();
        cell_name = {"B","A","C"};


        std::set <const char*>::iterator iter;

        for (iter = cell_name.begin();iter!=cell_name.end();++iter)
            std::cout << ' ' << *iter;
        std::cout << '\n';

    return 0;
}

【讨论】:

  • 你好,亚历克斯。我尝试了您的选项#1,现在效果很好。真的很感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多