如何使用查找算法的矢量

时间:2011-05-06 22:59:08

标签: c++ vector find

如果向量的元素是类型,例如vector<pair<int, double>>。我想将find算法集中在我向量的第一个元素上。我怎么能这样做?

例如,以下是我的数据:

<1, 2>

<3, 5>

<3, 4>
...

我想在第一列中找到1。

谢谢,

4 个答案:

答案 0 :(得分:4)

我不顾一切地回答泛型

template <typename K>
struct match_first
{
    const K _k; match_first(const K& k) : _k(k) {}
    template <typename V>
        bool operator()(const std::pair<K, V>& el) const 
    {
        return _k == el.first;
    }
};

使用它,例如

it = std::find_if(vec.begin(), vec.begin(), match_first<int>(1));

if (it!=vec.end())
{ 
    // found
}

答案 1 :(得分:2)

如果您使用的是较新的C ++编译器,则可以编写

int value_to_find = 1;
auto it = find_if( v.begin(), v.end(), [=]( const pair<int,double> &p ) { return p.first == value_to_find; } );
if ( it != v.end() ) {
    // found!
    }

答案 2 :(得分:1)

为什么不使用multimap<int, double>代替vector?它的.find(1)会产生一个迭代器,它会像你的例子那样给出pair<int, double>(1,2)对; http://www.sgi.com/tech/stl/Multimap.html

答案 3 :(得分:0)

无论语言/平台如何,这都是您需要做的(伪代码):

min = MAXIMUM_INTEGER_VALUE
minValue = 0
for each (element in vector)
  if (element.key < min)
    min = element.key
    minValue = element.value
  end if
loop for

现在你应该分别拥有min和minValue中最小的键和值 但是,在所有键等于MAXIMUM_INTEGER_VALUE的极端情况下,您可能会以错误的结果结束。解决方案是在初始化期间将第一个元素值分配给minValue而不是0。