c++ - 映射构造函数如何以类比较的形式使用?

标签 c++ dictionary constructor

当我在 cplusplus.com 上阅读 map 容器的引用资料时,我发现有 5 种使用其构造函数的方法。我了解了如何使用空容器构造函数、范围构造函数和复制构造函数。 但是移动构造函数和初始化列表构造函数呢?

这是一个使用 map 构造器的例子。第四个和第五个是如何构建的,它们的元素是什么。

// constructing maps
#include <iostream>
#include <map>

bool fncomp (char lhs, char rhs) {return lhs<rhs;}

struct classcomp {
   bool operator() (const char& lhs, const char& rhs) const
   {return lhs<rhs;}
};

int main ()
{
   std::map<char,int> first;

   first['a']=10;
   first['b']=30;
   first['c']=50;
   first['d']=70;

   std::map<char,int> second (first.begin(),first.end());

   std::map<char,int> third (second);

   std::map<char,int,classcomp> fourth;                 // class as Compare

   bool(*fn_pt)(char,char) = fncomp;
   std::map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare

   return 0;
}

最佳答案

第四个构造函数重载是一个移动构造函数。移动语义基本上是一种从即将被销毁的临时对象中窃取资源的方法。

如果您编写了一个返回 std::map 的函数,并尝试通过返回值初始化一个新函数,如:

std:: map <char, int> f ();
map <char, int> new_map (f());

new_map 将根据 f 的结果移动构建

您可以找到“右值引用”和“移动语义”的精彩解释 here .

initializer-list 构造函数使用新的大括号初始化语法,可能如下所示:

std:: map <char, char> TranslationTable {{'G', 'C'}, {'C', 'G'}, 
                                         {'T', 'A'}, {'A', 'T'}};    

关于c++ - 映射构造函数如何以类比较的形式使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789563/

相关文章:

java - JUnit:具有私有(private)字段的测试生成器

c++ - 尝试调用默认构造函数时没有匹配的构造函数

c++ - 在 Qt4 UI 中将用户输入的数据写入文件

c++ - boost::asio::buffer 如何迭代字节

java - 创建复制构造函数和覆盖的 clone() 方法

python - 嵌套字典的迭代器类

python - 计算数据框中每一行和特定列在列表中的出现次数

c++ - 如何在不同的 for 循环之间切换,这样的机制是否有意义?

c++ - QT 的 AfxGetApp()->m_lpCmdLine?

python - 字典中的 NumPy 切片表示法