小编Mil*_*nia的帖子

unordered_set非const迭代器

出于测试目的,我创建了一个小的unordered_set并尝试迭代该集合.该集合拥有自己的类:

class Student {
private:
    int matrNr;
    string name;
public:
    Student( const int& matrNr = 0, const string& name = "" )
        : matrNr( matrNr ), name( name ) {}
    void setNr( const int& matrNr ) {
        this->matrNr = matrNr;
    }
...
};
Run Code Online (Sandbox Code Playgroud)

我插入了一些元素并尝试在迭代期间更改对象:

unordered_set<Student, meinHash> meineHashTable;
meineHashTable.emplace( 12, "Fred" );
meineHashTable.emplace( 22, "Barney" );
meineHashTable.emplace( 33, "Wilma" );

for (int i = 0; i < meineHashTable.bucket_count(); i++) {
    cout << "Bucketnummer: " << i << endl;
    unordered_set<Student, meinHash>::local_iterator iter; …
Run Code Online (Sandbox Code Playgroud)

c++ stl unordered-set c++11

9
推荐指数
2
解决办法
4295
查看次数

推导 C++ 中的模板返回类型

目前,我尝试编写一个函数retrieveKeys(),该函数为我提供 a 的键std::map并将其存储在某些std::container. 该函数应以两种方式通用:

  • 接受std::mapstd::unordered_map作为参数类型。
  • 返回用户定义的容器中的键,例如std::vectoror std::deque(容器必须支持push_back()方法)。

目前该函数的使用原理如下:

std::unordered_map<int, int> testMap;
std::map<int, int> testMap2;

std::vector<int> keys1 = retrieveKeys<std::vector>(testMap);    
std::deque<int> keys2 = retrieveKeys<std::deque>(testMap);
std::vector<int> keys3 = retrieveKeys<std::vector>(testMap2);
std::deque<int> keys4 = retrieveKeys<std::deque>(testMap2);
Run Code Online (Sandbox Code Playgroud)

具有以下功能:

template<template<typename...> typename KeyContainer, typename... KeyContainer_Rest,
         template<typename...> typename MapContainer, typename K, typename V, typename... MapContainer_Rest>
inline KeyContainer<K, KeyContainer_Rest...> retrieveKeys(const MapContainer<K, V, MapContainer_Rest...>& map)
{
    KeyContainer<K, KeyContainer_Rest...> keys;

    for (const auto& m : map)
    {
        keys.push_back(m.first); …
Run Code Online (Sandbox Code Playgroud)

c++ templates return-type-deduction

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