C++和C#中的混合数组

sik*_*kas 5 c# c++ arrays

是否可以在C++和C#中创建混合数组

我的意思是一个包含字符和整数的数组?

例如:

Array [][] = {{'a',1},{'b',2},{'c',3}};
Run Code Online (Sandbox Code Playgroud)

LBu*_*kin 9

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)


Yip*_*Yay 5

如果每个元组中只有两个元素,则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#您可能想看到这个。