为什么 std::max_element over std::map 在某些 lower_bound 中不起作用?
why std::max_element over std::map within some lower_bound not working?
我不确定为什么以下代码段不起作用:
lower_bound
调用 return 键 7,这是预期的。然后 begin()
和 lower_bound()
之间的 std::max_element
迭代器应该 return 6,因为它应该在键 4 和键 7 之间搜索,键 7 的最大值为 6。
但由于某种我无法弄清楚的原因,它是 return 最后一个 pair(15, 12)
。
bool cmp(const std::pair<T, T>& p1, const std::pair<T, T>& p2)
{
return p1.second < p2.second;
}
int main()
{
std::map< T, T, std::greater<T> > store;
std::map< T, T, std::greater<T> >::iterator found_max, lower;
store[ 4 ] = 2;
store[ 7 ] = 6;
store[ 10 ] = 2;
store[ 15 ] = 12;
lower = store.lower_bound( 8 );
printf("%ld %ld\n", lower->first,lower->second);
found_max = std::max_element(store.begin(), lower, cmp);
printf("%ld %ld\n", found_max->first,found_max->second);
return 0;
}
std::map< T, T, std::greater<T> > store;
store
已按 降序 顺序对键进行排序。因此,[store.begin(), lower)
包含 (15, 22)
和 (10, 2)
。具有最大值的元素是 (15, 22)
.
我不确定为什么以下代码段不起作用:
lower_bound
调用 return 键 7,这是预期的。然后 begin()
和 lower_bound()
之间的 std::max_element
迭代器应该 return 6,因为它应该在键 4 和键 7 之间搜索,键 7 的最大值为 6。
但由于某种我无法弄清楚的原因,它是 return 最后一个 pair(15, 12)
。
bool cmp(const std::pair<T, T>& p1, const std::pair<T, T>& p2)
{
return p1.second < p2.second;
}
int main()
{
std::map< T, T, std::greater<T> > store;
std::map< T, T, std::greater<T> >::iterator found_max, lower;
store[ 4 ] = 2;
store[ 7 ] = 6;
store[ 10 ] = 2;
store[ 15 ] = 12;
lower = store.lower_bound( 8 );
printf("%ld %ld\n", lower->first,lower->second);
found_max = std::max_element(store.begin(), lower, cmp);
printf("%ld %ld\n", found_max->first,found_max->second);
return 0;
}
std::map< T, T, std::greater<T> > store;
store
已按 降序 顺序对键进行排序。因此,[store.begin(), lower)
包含 (15, 22)
和 (10, 2)
。具有最大值的元素是 (15, 22)
.