通过元素指针作为键的无序映射对向量进行排序

巴拉

我有一个向量元素std::vector<T> my_vec在代码的某个点上,我使用无序映射为向量的每个元素分配一个分数。之后,我想用可能的最少代码按向量元素的分数对向量进行排序。

我想出了这个解决方案,定义图如下:std::unordered_map<const T*, float> scores_map对于分数分配,将分数插入地图,如下所示:

for (const auto& el : my_vec)
    scores_map[&el] = calc_score(el);

然后我使用:

std::sort(my_vec.begin(), my_vec.end(), 
[&my_map](const auto& a, const auto& b){return my_map[&a] > my_map[&b];});

如果不知道如何做到这一点,这是否被认为是没有错误并且是好的做法?

萨胡

@fas在评论中写道:

向量中的元素在排序过程中会移动,因此它们的指针也会更改并scores_map变为无效,不是吗?

那是对的。您不应该将指针用作中的键scores_map

选项1

如果向量包含唯一项,则可以将T用作键类型。

for (const auto& el : my_vec)
    scores_map[el] = calc_score(el);

然后使用:

std::sort(my_vec.begin(), my_vec.end(), 
[&my_map](const auto& a, const auto& b){return my_map[a] > my_map[b];});

选项2

如果向量不包含唯一元素,则可以使用以下策略。

  1. 使用索引作为的键my_map
  2. 创建一个std::vector<size_t>仅包含索引的帮助程序对象。
  3. 对索引向量进行排序。
  4. 使用排序的索引向量从中获取元素my_vec
for (size_t i = 0; i < my_vec.size(); ++i )
    scores_map[i] = calc_score(my_vec[i]);

// Create the vector of indices
std::vector<size_t> indices_vec(my_vec.size());
for ( size_t i = 0; i < indices_vec.size(); ++i )
{
   indices_vec[i] = i;
}

// Sort the vector of indices
std::sort(indices_vec.begin(), indices_vec.end(), 
[&my_map](size_t a, size_t b){return my_map[a] > my_map[b];}); 


for (auto index : indices_vec)
{
   // Use my_vec[index]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义类指针作为无序映射键

来自分类Dev

自定义类指针作为无序映射键

来自分类Dev

通过向量作为指针

来自分类Dev

使用功能指针作为键进行映射

来自分类Dev

排序元素的向量或元素的指针

来自分类Dev

如何使用BeautifulSoup 4通过子元素对无序列表进行排序

来自分类Dev

如何使用BeautifulSoup 4通过子元素对无序列表进行排序

来自分类Dev

指针作为映射C ++ STL中的键

来自分类Dev

在C ++中对共享指针的向量进行排序

来自分类Dev

在C ++中对共享指针的向量进行排序

来自分类Dev

无法通过无序映射中的溢出进行交互

来自分类Dev

STL无序映射-插入向量

来自分类Dev

结构的映射作为键,结构的向量作为其值声明

来自分类Dev

如何通过指针擦除向量元素?

来自分类Dev

通过原始指针访问int向量的元素

来自分类Dev

集合与无序集合与排序向量

来自分类Dev

以无序元组为键的映射

来自分类Dev

如何对向量中的对元素进行排序?

来自分类Dev

使用成员函数指针作为键的C ++映射问题

来自分类Dev

根据NSArray元素对NSDictionary键进行排序

来自分类Dev

基于两个属性对类指针的向量进行排序?

来自分类Dev

如何通过值对对象进行排序,但仍然可以在映射函数中访问该对象的键?

来自分类Dev

如何在向量中的元素上进行指针/引用?

来自分类Dev

使用键作为字符串,按哈希的第一个元素对哈希数组进行排序

来自分类Dev

通过jQuery按(classname)对元素进行排序

来自分类Dev

在C ++中通过包含指针的向量进行Foreach

来自分类Dev

访问向量元素的指针

来自分类Dev

向量元素的映射索引

来自分类常见问题

R:按名称对命名向量中的元素进行排序

Related 相关文章

热门标签

归档