我在stl和范围[lo,hi]中有一张地图。
找到适合此范围的地图中所有元素的最佳方法是什么?
UDT:
关于upper_bound和low_bound的问题是:
例如,我有{1,2,7,8}的集合或地图,我的范围是[3,6]。 lower_bound将指向7,upper_bound将指向2.假设我不想删除史密斯,但只写出范围内的所有元素。我该怎么做?在这种情况下擦除会有多大的复杂性?
答案 0 :(得分:7)
如果您正在使用std :: map,它已经排序,您可以使用lower_bound / upper_bound来自cplusplus.com的示例:
static
答案 1 :(得分:2)
这是一个示范程序
#include <iostream>
#include <map>
#include <utility>
int main()
{
const size_t N = 10;
std::map<int, char> m;
for ( size_t i = 0; i < N; i++ ) m.insert( { i, char( 'A' + i ) } );
std::pair<int, int> range( 3, 7 );
auto low = m.lower_bound( range.first );
auto upper = m.upper_bound( range.second );
if ( low != upper )
{
for ( auto it = low; it != upper; ++it )
{
std::cout << it->first << ' ' << it->second << std::endl;
}
}
}
程序输出
3 D
4 E
5 F
6 G
7 H
这是专门为您的例子编写的程序
#include <iostream>
#include <map>
#include <utility>
int main()
{
std::map<int, char> m = { { 1, 'B' }, { 2, 'C' }, { 7, 'H' }, { 8, 'I' } };
std::pair<int, int> range( 3, 6 );
auto low = m.lower_bound( range.first );
auto upper = m.upper_bound( range.second );
if ( low != upper )
{
for ( auto it = low; it != upper; ++it )
{
std::cout << it->first << ' ' << it->second << std::endl;
}
}
else
{
std::cout << "The range is empty" << std::endl;
}
}
程序输出
The range is empty