use*_*112 4 c++ stl stdmap c++11
给定一个键是整数的 C++ 映射(或多映射),是否可以使用 STL 请求键是给定数字以下最大数字的元素范围?
所以如果我有:
map = {{1,'x'}, {2, 'g'}, {3, 'n'}, {3, 'm'}, {4, 'z'}, {5, 'a'}}
Run Code Online (Sandbox Code Playgroud)
我想在 4 之前找到元素,它会返回:
{{3, 'n'}, {3, 'm'}}
Run Code Online (Sandbox Code Playgroud)
(我更感兴趣,std::map但也保留了一般问题std::multimap)。
您可以使用lower_bound()查找所需元素之后的第一个元素,然后递减迭代器并使用equal_range()来访问与该元素匹配的所有元素:
#include <iostream>
#include <map>
int main()
{
std::multimap<int, char> const
m{{1,'x'}, {2,'g'}, {3,'n'}, {3,'m'}, {4,'z'}, {5 'a'}};
auto i = m.lower_bound(4);
if (i == m.begin()) {
std::cerr << "No elements less than 4 were found\n";
} else {
--i;
auto const range = m.equal_range(i->first);
for (auto j = range.first; j != range.second; ++j)
std::cout << j->first << ", " << j->second << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <map>
int main()
{
std::multimap<int, char> const
m{{1,'x'}, {2,'g'}, {3,'n'}, {3,'m'}, {4,'z'}, {5 'a'}};
auto i = m.lower_bound(4);
if (i == m.begin()) {
std::cerr << "No elements less than 4 were found\n";
} else {
--i;
auto const range = m.equal_range(i->first);
for (auto j = range.first; j != range.second; ++j)
std::cout << j->first << ", " << j->second << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |