gpt4 book ai didi

c# - C++等效于C#Array.Sort

转载 作者:行者123 更新时间:2023-12-02 10:30:44 25 4
gpt4 key购买 nike

如果存在,那么C#相当于 Array.Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32) 的C++?
我查看了C#函数的源代码,但无法解决。

最佳答案

您提供的doc链接没有提及算法复杂性(毫无疑问,考虑到该公司提供必要信息的程度如何)。通常,如果没有至少一个额外的O(N)空间,这看起来是不可行的。链接到注释的Konrad解决方案可能是最便宜的解决方案,但是如果数组中的元素很小且很琐碎,则可以按以下方式对它们进行排序:只需将它们放在 map 中即可:

std::multimap<TKey, TValue> items;
for(std::size_t i{}; i < keys.size(); ++i) {
items.emplace(std::move(keys[i]), std::move(values[i]));
}

std::size_t i{};
for(auto &&kv: items) {
keys[i] = kv.first;
keys[i] = std::move(kv.second);
++i;
}

(可以使用两个单行的 std::transform代替第二个循环,一个复制键,另一个复制值。)

或数组而不是 map :

std::vector<std::pair<TKey, TValue>> items(keys.size());
std::transform(
std::make_move_iterator(keys.begin()),
std::make_move_iterator(keys.end()),
std::make_move_iterator(values.begin()),
items.begin(),
(auto &&k, auto &&v) { return std::pair{std::move(k), std::move(v); });

std::sort(items.begin(), items.end(), [](auto const &l, auto const &r) {
return l.first < r.first;
});
// Now copy them back, like above.

Zip迭代器在这里可能很有用,但它不在STL中,因此只有库级别的解决方案。

关于c# - C++等效于C#Array.Sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62344183/

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