在 C++ 中,unordered_map
和 map
是从 map 中搜索键的好工具。
我可以构建一个 map ,其中键是日期,值是 double (或我自定义的结构)。
但我想要一个范围映射,这意味着键是一个范围,例如:
#inlcude <map>
m[20190101] =3;
m[20201201] = 4.
cout << m[20200101]; // i want this can return me 3. because 20200101 is
// lower-close to 20190101
我该如何实现这个?
最佳答案
std::map
将数据存储在二叉树中,因此您可以轻松找到大于/大于或等于 upper_bound
的值的最接近的键和 lower_bound
方法
m.lower_bound(k)
:返回一个指向第一个键不小于 k 的元素的迭代器,如果没有找到这样的元素,则返回 m.end()。m.upper_bound(k)
:返回一个指向第一个键大于 k 的元素的迭代器,如果没有找到这样的元素,则返回 m.end()。
然后,您可以递减迭代器(如果它不等于 begin()
)以查找下一个较小的元素。
举个例子:
auto it = m.upper_bound(20200101);
if (it != m.begin())
std::cout << *--it;
else
std::cout << "no key <= 20200101";
关于c++ - C++ 中有范围映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66719237/