如何使用向量查找算法

发布于 2024-11-05 17:59:22 字数 247 浏览 3 评论 0 原文

如果向量的元素是pair类型,如vector>。我希望查找算法专注于向量的第一个元素。我该怎么做?

例如,以下是我的数据:

<1, 2>

<3, 5>

<3, 4>
...

我想要在第一列中查找 1。

谢谢,

If the vector's element is a pair type, like vector<pair<int, double>>. I want to the find algorithm focus on the first element of my vector. How can I do this?

For example, the following is my data:

<1, 2>

<3, 5>

<3, 4>
...

I want the find 1 in the first column.

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甜味超标? 2024-11-12 17:59:22

不遗余力地让答案通用

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
}

Going out of my way to make the answer generic:

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;
    }
};

use it like, e.g.

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

if (it!=vec.end())
{ 
    // found
}
究竟谁懂我的在乎 2024-11-12 17:59:22

如果您使用较新的 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!
    }

If you're using newer C++ compiler you could write

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!
    }
还在原地等你 2024-11-12 17:59:22

为什么不使用 multimap 而不是 vector?它的 .find(1) 将产生一个迭代器,该迭代器将给出对 pair(1,2) 如您的示例中所示; http://www.sgi.com/tech/stl/Multimap.html

why not use a multimap<int, double> instead of a vector? its .find(1) would yield an iterator that would give the pair pair<int, double>(1,2) as in your example; http://www.sgi.com/tech/stl/Multimap.html

欲拥i 2024-11-12 17:59:22

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

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。

Regardless of language/platform this is what you need to do (in pseudo code):

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

Now you should have the smallest key and it's value in min and minValue respectively.
However you COULD in the extreme case of when all keys are equal to MAXIMUM_INTEGER_VALUE end up with the wrong result. The solution would be to assign the first elements value to minValue instead of 0 during initialization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文