c++ - C++ 中有范围映射吗?

标签 c++ stl unordered-map

在 C++ 中,unordered_mapmap 是从 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/

相关文章:

c++ - 通过原始套接字发送源 MAC 和 IP

c++ - std::ostringstream 运算符重载搜索顺序?

c++ - 在EXPECT_EQ中使用GTest/GMock Matcher

c++ - string::compare 多余的参数?

c++ - 如何在无序映射中为自定义类重用字符串类的哈希函数?

c++ - 如何同时填充 std::unordered_map?

c++ - 被 C++ 中的矩阵难住了

c++ - std::basic_string 类型的 STL 容器

c++ - STL 容器中的常量和非常量

c++ - unordered_map 具有三个元素