簡體   English   中英

將特定范圍內的值存儲在地圖中

[英]Storing values from a certain range in a map

因此,我有一個值圖,例如:

 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;
 }

我的問題是:如何獲得此示例中存在於高低之間的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函數返回一個映射迭代器,所以您真正要問的是如何通過迭代器訪問存儲在映射中的對象。

映射的迭代器指向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() );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM