最近开始熟悉C++11,auto 关键字很棒!打字:

for (auto bar : bars) {

哦,太令人满意了。保持代码可读性和美观性。仍然感觉它停止了你所有的动力是以下几点:
foo.insert(std::pair<std::string, bar>("soVerbose", baz));

// As opposed to simply:

foo.insert("soVerbose", baz);

有什么好的理由是这样吗?是否有一些巧妙的方法可以让它不那么冗长?我知道 [] 运算符可用于将元素插入 map ,但功能略有不同。

最佳答案

使用 emplace 函数:

#include <iostream>
#include <utility>

#include <map>

int main()
{
    std::map<std::string, std::string> m;

    // uses pair's copy-constructor
    m.emplace(std::make_pair(std::string("a"), std::string("a")));

    // uses pair's converting copy constructor
    m.emplace(std::make_pair("b", "abcd"));

    // uses pair's template constructor
    m.emplace("d", "ddd");

    // uses pair's piecewise constructor
    m.emplace(std::piecewise_construct,
              std::forward_as_tuple("c"),
              std::forward_as_tuple(10, 'c'));

    for (const auto &p : m) {
        std::cout << p.first << " => " << p.second << '\n';
    }
}

关于c++ - 减少冗长 : inserting elements into map,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20531466/

10-11 22:38