小编pat*_*tyx的帖子

如何通过引用构建向量的子范围?

我目前正在利用范围构造函数std::vector来创建给定子范围的另一个向量。

std::vector<int> myVect { 1, 2, 3, 4 };

std::vector<int> subrangeVector(myVect.begin(), myVect.begin() + 2);
Run Code Online (Sandbox Code Playgroud)

但是,这会导致 myVect 的范围值被复制并占用额外的内存。当使用有限的内存和/或非常大的元素类型时,这是不可取的。

如何通过引用构建另一个向量的子范围?

我的目标的简化解释如下:

void fun(std::vector<int> & v) { v.at(0) = 1; }

int main()
{
    std::vector<int> myVect { 1, 2, 3, 4 };

    std::size_t upperLimit = 5;
    std::vector<int> subrangeVector = subrangeView(myVect, upperLimit);

    fun(subrangeVector);  // so myVect.at(0) == 1

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这将在std::vector用作参数的许多不同函数中实现。我不想传递这里讨论的迭代器。假设我无法控制函数fun

c++ reference-type slice stdvector

2
推荐指数
1
解决办法
237
查看次数

如何获得 std::unordered_map 的最大元素?

我知道如何std::map通过使用检索 a 的最大元素std::max_element,但std::unordered_map由于容器类型之间的差异,我无法使用 a 实现相同的效果。

如何找到 a 中的最大值std::unordered_map并返回相应的std::pair

显示了我当前使用 a 执行此操作的方法std::map(基于此答案)。我似乎无法弄清楚如何对std::unordered_map.

template <typename KEY_T, typename VALUE_T>
std::pair<KEY_T, VALUE_T> findMaxValuePair(
    std::map<KEY_T, VALUE_T> const &x)
{
    return *std::max_element(x.begin(), x.end(),
                             [](const std::pair<KEY_T, VALUE_T> &p1,
                                const std::pair<KEY_T, VALUE_T> &p2)
                             {
                                 return p1.second < p2.second;
                             });
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在std::unorderd_map( 替换为 ) 上使用上述函数std::mapstd::unordered_map,我收到一个Segmentation fault (core dumped).

c++ unordered-map c++17

1
推荐指数
1
解决办法
4697
查看次数

标签 统计

c++ ×2

c++17 ×1

reference-type ×1

slice ×1

stdvector ×1

unordered-map ×1