如果向量的元素是对类型,例如vector<pair<int, double>>
。我想将find算法集中在我向量的第一个元素上。我怎么能这样做?
例如,以下是我的数据:
<1, 2>
<3, 5>
<3, 4>
...
我想在第一列中找到1。
谢谢,
答案 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。