使用初始化列表在构造函数中初始化复杂映射

Initialize complex map in constructor with initializer list

前几天我想知道是否有可能在 C++(任何标准)中用循环或比文字更复杂的过程在构造函数的初始化列表中初始化映射,这样我就可以使它成为 const成员变量?

class MyClass {
public:
    const int myInt;
    const std::unordered_map<int, int> map;
    MyClass(int i) : myInt(i), /* initialize map like: for(int i = 0; i < myInt; ++i) { map[i] = whatever; } { }
}

您可以在构造函数初始化列表中使用 lambda 函数。像这样:

class MyClass {
public:
    const int myInt;
    const std::unordered_map<int, int> umap;
    MyClass(int i) : myInt(i), umap( [i]() -> decltype(umap) {
      std::unordered_map<int, int> tu;
      for(int j=0; j<i; j++)
        tu[j]=j;
      return tu; 
    }()) {}
};