gpt4 book ai didi

c++ - 按索引值按字母顺序对 vector 进行排序

转载 作者:行者123 更新时间:2023-11-27 23:19:00 25 4
gpt4 key购买 nike

我有一个 vector ,我想按字母顺序排序。我已经成功地能够按字母顺序按一个索引值对其进行排序,但是当我这样做时,它只会更改该索引的顺序,而不是整个 vector 的顺序。我如何才能将订单更改应用于整个 vector ?这是我当前正在运行的代码:

std::sort (myvector[2].begin(), myvector[2].end(), compare);

bool icompare_char(char c1, char c2)
{
return std::toupper(c1) < std::toupper(c2);
}

bool compare(std::string const& s1, std::string const& s2)
{
if (s1.length() > s2.length())
return true;
if (s1.length() < s2.length())
return false;
return std::lexicographical_compare(s1.begin(), s1.end(),
s2.begin(), s2.end(),
icompare_char);
}

我对该 vector 的一般结构是 vector[row][column] 其中:

| One | Two | Three |
| 1 | 2 | 3 |
| b | a | c |

例如,如果我有一个 vector :

myvector[0][0] = 'One' AND myvector[2][0]='b'
myvector[0][1] = 'Two' AND myvector[2][1]='a'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| One | Two | Three |
| 1 | 2 | 3 |
| b | a | c |

然后我对它进行排序,我得到:

myvector[0][0] = 'One' AND myvector[2][0]='a'
myvector[0][1] = 'Two' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| One | Two | Three |
| 1 | 2 | 3 |
| a | b | c |

不是我想要的:

myvector[0][0] = 'Two' AND myvector[2][0]='a'
myvector[0][1] = 'One' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| Two | One | Three |
| 2 | 1 | 3 |
| a | b | c |

我环顾四周寻找一个好的方法,但找不到任何有效的方法......我在想类似的东西:

std::sort (myvector.begin(), myvector.end(), compare);

然后在我的比较函数中处理第三个索引的排序,以便编辑整个 vector ...但是当我传递数据时,我要么只更改了函数中的顺序,但仍然没有更改顶层或得到错误。任何建议或帮助将不胜感激。提前谢谢你。

最佳答案

理想情况下,将 3 个数据字段合并到一个 struct 中,这样您就可以只有 1 个 vector 并对其进行简单排序。

struct DataElement{
std::string str;
char theChar;
int num;
bool operator<(const DataElement& other)const{return theChar<other.theChar;}
};

std::vector<DataElement> myvector;

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

关于c++ - 按索引值按字母顺序对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com