我正在使用此函数按字母顺序对字符串数组中的名称进行排序。但这是行不通的。如果有人有最佳解决方案,请回答此问题。
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;
}
}
}
}
答案 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)
如果KeyFrame
是Prolist
,std::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::sort
是Prolist
,请改用:
std::list
并且不需要迭代器。
如果 Prolist.sort(less);
是动态分配的内存,则您获取
迭代器使用:
Prolist
但是,由于Single Responsibility Rule,因此我建议您在这种情况下将您的手动内存管理替换为 auto beg = Prolist;
auto end = Prolist + cap; // <- 'cap' or what holds the number of items
。