C++执行策略不适用于std::map



我已经在ubuntu 20.04和gcc 9上成功地使用了std::execution::par_unseq策略。然而,我遇到了一个奇怪的行为,它不适用于地图,但适用于矢量

示例1:

typedef std::map<std::string, std::vector<std::shared<Foo>>> ProblemsType;
ProblemsType values;
FillValues(values);
std::for_each(std::execution::par_unseq, values.begin(), values.end(), [](ProblemsType::value_type value) {
// Do something
}

示例2:

typedef std::map<std::string, std::vector<std::shared<Foo>>> ProblemsType;
ProblemsType values;
FillValues(values);
std::vector<std::pair<std::string>, std::vector<std::shared<Foo>>> valuesAsVector;
FillVectorWithMapValues(valuesAsVector, values);
std::for_each(std::execution::par_unseq, valuesAsVector.begin(), valuesAsVector.end(), [](std::pair<std::string>, std::vector<std::shared<Foo>> value) {
// Do something
}

#1不起作用,但2起作用。我通过观察htop的cpu使用情况进行了检查,发现#2使用了所有内核(以及几个线程(。对于#1,只使用了一个核心。

我检查了std::map::迭代器是一个满足LegacyForwardIteratorLegacyBidirectionIterator

std::map阻止使用执行策略par_unseq有什么特别之处吗?

std::map是否有任何特殊之处阻止使用执行策略par_unseq?

您没有阻止使用par_unseq,可能实现选择不做任何与非策略重载不同的事情。

这是一个实施质量问题,即实施是否与政策赋予的额外自由有所不同

相关内容

  • 没有找到相关文章

最新更新