【问题标题】:Comparing a c++ std::vector's elements with each other将 c++ std::vector 的元素相互比较
【发布时间】:2013-08-29 11:27:57
【问题描述】:

我有一个双值的 std::vector。现在我需要知道两个后续元素是否在一定距离内才能处理它们。 我之前用std::sort对向量进行了排序。
我已经考虑过使用std::find_if 和 lambda 表达式 (c++11) 确定这些元素的解决方案,如下所示:

std::vector<std::vector<double>::iterator> foundElements;
std::vector<double>::iterator foundElement;
while (foundElement != gradients.end())
{
    foundElement = std::find_if(gradients.begin(), gradients.end(),
                 [] (double grad)->bool{
        return ...
    });
    foundElements.push_back(foundElement);
}

但是谓词实际上应该返回什么?计划是我使用迭代器的向量稍后修改向量。
我是在正确的轨道上使用这种方法还是太复杂/不可能?还有哪些其他可能更实用的解决方案?

编辑:我想我会按照一位回答者的建议使用std::adjacent_find 函数。

【问题讨论】:

  • "我需要知道是否有两个后续的" =>我相信你忘了写你的一部分。 :)
  • 当然 :) 我想现在这篇文章更容易理解了。

标签: vector iterator standard-library c++


【解决方案1】:

你能提高你问题的语法吗?

“我有一个具有不同 double 值的 std::vector。现在我需要知道两个后续的(我之前使用 std::sort 对向量进行了排序)是否在一定距离内处理它们)。”

您是否暗示双精度类型向量的每个元素都是唯一值?如果是这种情况,是否可以合理地推断出您的目标是找到每个元素之间的距离?

【讨论】:

  • 不,我并不是说每个元素都是独一无二的,但很可能就是这样。无论如何,没关系。目标不是找到距离,而是找到非常接近的元素。
【解决方案2】:

了解std::adjacent_find

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多