如何遍歷C++中的部分地圖?我的最終目標是讓多個線程遍歷地圖的一部分並計算一些值。該地圖的類型爲std::map<std::string, std::vector<double> >
在C++中迭代部分地圖
1
A
回答
2
這裏是做C++ 11的一個簡單的方法:
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <future>
#include <iostream>
typedef std::map<std::string, std::vector<double>> map_type;
void do_work(map_type::iterator b, map_type::iterator e)
{
std::for_each(b, e, [] (map_type::value_type const& p)
{
std::for_each(p.second.begin(), p.second.end(), [] (double d)
{
/* Process an element of the vector... */
});
});
}
int main()
{
map_type m;
size_t s = m.size();
int quarter = s/4;
auto i1 = m.begin();
auto i2 = std::next(i1, quarter);
auto i3 = std::next(i2, quarter);
auto i4 = std::next(i3, quarter);
auto i5 = m.end();
std::vector<std::future<void>> futures;
futures.push_back(std::async(do_work, i1, i2));
futures.push_back(std::async(do_work, i2, i3));
futures.push_back(std::async(do_work, i3, i4));
futures.push_back(std::async(do_work, i4, i5));
for (auto& f : futures) { f.wait(); }
}
1
如果您希望均勻分割工作,則映射可能不是最佳數據結構。你需要遍歷map並找到特定位置的迭代器。如果你使用提供隨機訪問迭代器的容器,比如std :: vector,那麼你可以用算術計算迭代器。 如果你想這樣做的字母順序,那麼你可以做這樣的事情:
typedef std::map<std::string,std::vector<double>> data;
void process(data::iterator beg, data::iterator end);
data dt;
{
auto task1 = std::async(process, dt.begin(), dt.lower_bound("n"));
auto task2 = std::async(process, dt.lower_bound("n"), dt.end());
}
假設所有字符串都是小寫。
相關問題
- 1. C++迭代地圖
- 2. 在C++中迭代兩張地圖
- 3. 地圖C++逆向迭代
- 4. 的Java地圖迭代使用地圖中地圖後迭代
- 5. 在selmer中迭代地圖
- 6. CSS部分迭代
- 7. C++刪除循環中的迭代器(地圖的地圖)
- 8. C++通過模板迭代地圖
- 9. 通過迭代打印C++地圖
- 10. C++地圖迭代器跳元素
- 11. 在JSP中爲迭代的迭代地圖列表MVC
- 12. 在地圖中迭代和使用find()C++
- 13. C++在地圖訪問和迭代中採用的時間
- 14. 哈克迭代(圖)在地圖
- 15. 如何在地圖內的地圖內迭代地圖
- 16. 迭代在C++
- 17. 如何通過地圖與地圖迭代在Java中
- 18. 迭代嵌套地圖
- 19. 如何迭代此地圖?
- 20. 如何迭代scala地圖?
- 21. STL地圖迭代器集
- 22. S:迭代器來地圖
- 23. 迭代手稿地圖
- 24. 迭代器的地圖
- 25. 通過doseq迭代地圖
- 26. 迭代地創建圖形
- 27. 迭代查找地圖
- 28. 地圖迭代器不dereferencable
- 29. 的Javascript迭代地圖
- 30. ConcurrentModificationException的迭代地圖
怎麼樣'的std :: for_each的()'? – 2013-02-27 00:09:15
你想要迭代哪部分地圖?是的,它可以完成,是的,我知道如何。但除非我知道如何選擇地圖的一部分進行迭代的準則,否則我不能告訴你如何去做。 – jalf 2013-02-27 00:10:33
@jalf:所以如果我有4個線程,那麼每個線程將通過地圖尺寸的四分之一 – 2013-02-27 00:14:10