如何使用C++(g++编译器)初始化一个无序集

How to initialize an unorderd_set using C++ (g++ compiler)?

本文关键字:一个 无序 初始化 何使用 g++ 编译器 C++      更新时间:2023-10-16

我在尝试用g++编译示例代码时观察到以下错误

#include <iostream>
#include <unordered_set>
int main () {
   std::unordered_set<std::string> second ( {"red","green","blue"} );    // init list
   std::unordered_set<std::string> second1 {"red", "green", "blue"}; // Marcelo Cantos
   std::unordered_set<std::string> second2{{"red", "green", "blue"}}; // Marcelo Cantos
   std::unordered_set<std::string> second3 = {"red", "green", "blue"};// Marcelo Cantos   
   return 0;
}
$ gcc -o wp -Wall -Wextra test_set.cpp 
test_set.cpp:5:45: error: expected expression
   std::unordered_set<std::string> second ( {"red","green","blue"} )...
                                        ^
test_set.cpp:6:43: error: expected ';' at end of declaration
   std::unordered_set<std::string> second1 {"red", "green", "blue"};
                                          ^
                                          ;
test_set.cpp:7:43: error: expected ';' at end of declaration
   std::unordered_set<std::string> second2{{"red", "green", "blue"}};
                                          ^
                                          ;
test_set.cpp:8:36: error: non-aggregate type 'std::unordered_set<std::string>' cannot be initialized with an initializer list
   std::unordered_set<std::string> second3 = {"red", "green", "blue"};
                                   ^         ~~~~~~~~~~~~~~~~~~~~~~~~
4 errors generated.

$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

使用编译器选项"-std=c++11"解决。

$g++-o testronget-Wall-Wextra-std=c++11 testronget.cpp

使用编译器选项"-std=c++11"求解。

$ g++ -o test_set -Wall -Wextra -std=c++11 test_set.cpp 

适用于我。

Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

您可以尝试以下替代形式之一,所有这些形式都适用于clang 6.0:

…second{"red", "green", "blue"};
…second{{"red", "green", "blue"}};
…second = {"red", "green", "blue"};