【发布时间】:2014-02-06 15:23:06
【问题描述】:
我想std::partial_sort_copy() 一个数组,但使用自定义比较器函数。问题是,这个函数同时使用了被比较的数组单元的 值 和它们的 索引。
为了便于讨论,假设我的比较函数类似于
template <typename T>
bool myCompare(size_t lhs_index, const T& lhs, size_t rhs_index, const T& rhs) {
T lhs_compound = lhs * (lhs_index % 2 ? -1 : 1);
T rhs_compound = rhs * (lhs_index % 2 ? -1 : 1);
return (lhs_compound <= rhs_compound);
}
(如果你喜欢,我可以让它更做作......)
起初我想使用一个接受pair<size_t, T>s 的比较器对象——但这行不通,因为这意味着我的输出将是这样对的数组,我不希望这样。事实上,我需要不实现任何东西 - 所以不需要数组对、索引或任何类似的东西。
我应该怎么做?
【问题讨论】:
-
您要解决什么问题?假设您只对
vector或array进行排序? -
@Chad:我实际上想做一些更复杂的事情,即使用数组中的索引在另一个数组中查找某些内容,但我不想先进行所有查找和排序一个元组数组。
-
@AbhishekBansal:这是给你的比较器......或者更确切地说,这是我可能想要运行的比较,而不是比较器对象。我不能真正将比较器对象与对一起使用,因为我不必具体化对数组。
-
所有初始元素都是正数还是有些也可以是负数?
-
@AbhishekBansal:假设有些可能是负面的。无论如何,这不是我要解决的问题,只是一个插图。
标签: c++ arrays sorting comparator c++-standard-library