【发布时间】:2020-08-09 00:00:53
【问题描述】:
给定三个双精度向量,我想对每个向量中的每个元素进行配对,以使每个三元组中最大和最小元素之间的差异最小化,并且每个向量的每个元素都是三元组的一部分。现在,我正在使用std::lower_bound():
double closest(vector<double> const& vec, double value){ auto const ret = std::lower_bound(vec.begin(), vec.end(), value); return(*ret); }
int main(){
vector<double> a, b, c; vector<vector<double>> triples;
for(auto x : a){
triples.push_back({x, closest(b, x), closest(c, x)});
}
}
假设这里的 a、b 和 c 填充了一些值。问题是,lower_bound() 返回比参数最近的元素不少于。我还想考虑比论点少的元素。有什么好的方法吗?
【问题讨论】:
-
可以使用2个std::min_element来确定最小向量就是具有最小值的向量。当向量不是最小向量时,它可以在 std::remove_if 内删除。
-
在你的例子中,为什么你只想删除第一个而不是第二个向量?正如您所说,第三个具有“D”的最小值,您的第二步是删除除那个之外的所有内容。总的来说,您的要求很难理解。如果一个元素不与另一个向量共享任何 A、B 或 C,会发生什么?
标签: c++ algorithm sorting vector