如何在数组C ++中对字符串排序

时间:2018-09-28 07:12:56

标签: c++ arrays sorting

我正在使用此函数按字母顺序对字符串数组中的名称进行排序。但这是行不通的。如果有人有最佳解决方案,请回答此问题。

void List::sort_Name()
{
    string temp;
    for (int i = 0; i < cap; i++)
    {
        for (int j = 0; j < cap; j++)
        {
            if (Prolist[i].getName() < Prolist[i + 1].getName())
            {

                temp = Prolist[i].getName();
                Prolist[i].getName() = Prolist[i + 1].getName();
                Prolist[i + 1].getName() = temp;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:3)

忽略提供的不完整代码段,这是在c ++中对字符串进行排序的方式:

std::list<std::string> strings{ "foo", "bar", "baz", "test" };
strings.sort();
for (std::string s : strings) {
    std::cout << "string: " << s << std::endl;
}

它产生输出:

string: bar
string: baz
string: foo
string: test

也可以使用std::vector而不是std::list,在许多用例中性能更高,您可以使用strings.sort();而不是std::sort(strings.begin(), strings.end());

答案 1 :(得分:0)

您也可以按以下方式对字符串进行排序:

std::array<std::string,4> strings{ "foo", "bar", "baz", "test" };
std::sort(strings.begin(),strings.end());
for (std::string s : strings) {
    std::cout << "string: " << s << std::endl;
}

答案 2 :(得分:0)

如果KeyFrameProliststd::vector或 c样式的数组,则可以使用以下内容:
(我假设std::array项目的类型为ProList, 必要时更换)

Item

此外,#include <algorithm> void List::sort_Name() { auto beg = std::begin(Prolist); auto end = std::end(Prolist); auto less = [](const Item& lhs, const Item& rhs) -> bool { return lhs.getName() < rhs.getName(); }; std::sort(beg, end, less); } 被假定为const方法,应该是, 并且假定返回的内容可以与getName()

进行比较

这可以通过创建lambda来进行项目比较,然后 使用标准库算法<

如果std::sortProlist,请改用:

std::list

并且不需要迭代器。

如果 Prolist.sort(less); 是动态分配的内存,则您获取 迭代器使用:

Prolist

但是,由于Single Responsibility Rule,因此我建议您在这种情况下将您的手动内存管理替换为 auto beg = Prolist; auto end = Prolist + cap; // <- 'cap' or what holds the number of items