gpt4 book ai didi

c++ - 在 map 中存储特定范围内的值

转载 作者:行者123 更新时间:2023-11-28 01:58:01 37 4
gpt4 key购买 nike

所以我有一个值映射,例如:

 1 3 5 7 9

使用我当前的代码,我目前能够找到 [low, high] 的特定范围之间的出现次数。例如,如果我有 [3, 7],我会得到值 3。

我当前的代码如下所示:

 // map::lower_bound/upper_bound
#include <iostream>
#include <map>
using namespace std;

int main ()
{
map<long,deque<my_struct>> my_map;
deque<my_struct> results;

mymap[12345].push_back(some_obj);
mymap[23456].push_back(some_obj);
mymap[34567].push_back(some_obj);
mymap[45678].push_back(some_obj);

auto low = my_map.lower_bound (12345);
auto high = my_map.upper_bound (34567);

int num = 0;
for (auto it = low; it != high; ++it){
++num;
//how to insert into my results deque?
}
cout << num << " found\n"; //3found
return 0;
}

我的问题是:如何获取此示例中存在于 low 和 high 之间的 3 个对象?我想将这 3 个对象存储在“结果”双端队列中,这样我就知道在该特定范围内找到了 3 个对象。我知道我想插入 my-struct 的 3 个对象,但我很难弄清楚语法。任何提示或帮助将不胜感激!!

编辑:尝试使用新方法

 using namespace std;

struct my_struct{
string value;
};

int main ()
{
map<long,deque<my_struct>> my_map;
deque<my_struct> results;

my_struct entrya;
entrya.value = "today is a great day";

my_struct entryb;
entryb.value = "today is an okay day";

my_struct entryc;
entryc.value = "today is a bad day";


my_map[12345].push_back(entrya);
my_map[23456].push_back(entryb);
my_map[34567].push_back(entryc);


auto low = my_map.lower_bound (12345);
auto high = my_map.upper_bound (34567);

int num = 0;
for (auto it = low; it != high; ++it){
++num;
results.insert(results.back(), it->second.begin(), it->second.end());
//how to insert into my results deque?
}
cout << num << " found\n"; //3found

cout << "testing results\n";
for (int i = 0; i < results.size(); i++){
cout << results[i].value << "\n";
}
return 0;

编辑:图片版https://gyazo.com/4960e067252f23ffafb924fa8e6693eb

最佳答案

lower_boundupper_bound函数返回一个映射迭代器,所以您真正要问的是如何通过迭代器访问存储在映射中的对象。

map 的迭代器指向一个std::pair ,其中第一个元素是键,第二个元素是值。因此,要取出您的存储值,您可以使用 it->second .

因为映射中的值类型实际上是一个std::deque<my_struct> ,大概您想将所有数据连接到单个双端队列 results .您可以使用 std::deque::insert 执行此操作功能如下:

//how to insert into my results deque?
results.insert( result.end(), it->second.begin(), it->second.end() );

关于c++ - 在 map 中存储特定范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518508/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com