是否可以在C++和C#中创建混合数组
我的意思是一个包含字符和整数的数组?
例如:
Array [][] = {{'a',1},{'b',2},{'c',3}};
Run Code Online (Sandbox Code Playgroud)
C#和C++都不支持使用本机数组创建这种数据结构,但是您可以使用List<Tuple<char,int>>C#或std::vector<std::pair<char,int>>C++创建.
如果其中一个元素可以被视为唯一键,您也可以考虑使用Dictionary<>或std::map<>集合,并且元素的顺序不重要但只是它们的关联.
对于列表(而不是字典)的情况,在C#中你会写:
List<Tuple<char,int>> items = new List<Tuple<char,int>>();
items.Add( new Tuple<char,int>('a', 1) );
items.Add( new Tuple<char,int>('b', 2) );
items.Add( new Tuple<char,int>('c', 3) );
Run Code Online (Sandbox Code Playgroud)
在C++中你会写:
std::vector<std::pair<char,int>> items; // you could typedef std::pair<char,int>
items.push_back( std::pair<char,int>( 'a', 1 ) );
items.push_back( std::pair<char,int>( 'b', 2 ) );
items.push_back( std::pair<char,int>( 'c', 3 ) );
Run Code Online (Sandbox Code Playgroud)
如果每个元组中只有两个元素,则C++必须使用类似std::vector<boost::tuple< , , >or的东西。std::vector<std::pair>
案例举例C++:
typedef std::pair<int, char> Pair;
std::vector<Pair> pairs;
pairs.push_back(Pair(0, 'c'));
pairs.push_back(Pair(1, 'a'));
pairs.push_back(Pair(42, 'b'));
Run Code Online (Sandbox Code Playgroud)
该案例的扩展示例C++(使用boost::assign)。
using boost::assign;
std::vector<Pair> pairs;
pairs += Pair(0, 'c'), Pair(1, 'a'), Pair(42, 'b');
Run Code Online (Sandbox Code Playgroud)
因为C#您可能想看到这个。