我目前正在將Python中的算法轉換爲C++。C++中簡明的列表/向量
這條線EXCH_SYMBOL_SETS = [["i", "1", "l"], ["s", "5"], ["b", "8"], ["m", "n"]]
現在
vector<vector<char>> exch_symbols;
vector<char> vector_1il;
vector_1il.push_back('1');
vector_1il.push_back('i');
vector_1il.push_back('l');
vector<char> vector_5s;
vector_5s.push_back('5');
vector_5s.push_back('s');
vector<char> vector_8b;
vector_8b.push_back('8');
vector_8b.push_back('b');
vector<char> vector_mn;
vector_mn.push_back('m');
vector_mn.push_back('n');
exch_symbols.push_back(vector_1il);
exch_symbols.push_back(vector_5s);
exch_symbols.push_back(vector_8b);
exch_symbols.push_back(vector_mn);
我不喜歡有用於在2-d向量中的每個內的可變的中間命名的變量是。我並不熟悉C++中的多維數據結構。有沒有更好的辦法?
發生了什麼事以後是這樣的:
multimap<char, char> exch_symbol_map;
/*# Insert all possibilities
for symbol_set in EXCH_SYMBOL_SETS:
for symbol in symbol_set:
for symbol2 in symbol_set:
if symbol != symbol2:
exch_symbol_map[symbol].add(symbol2)*/
void insert_all_exch_pairs(const vector<vector<char>>& exch_symbols) {
for (vector<vector<char>>::const_iterator symsets_it = exch_symbols.begin();
symsets_it != exch_symbols.end(); ++symsets_it) {
for (vector<char>::const_iterator sym1_it = symsets_it->begin();
sym1_it != symsets_it->end(); ++sym1_it) {
for (vector<char>::const_iterator sym2_it = symsets_it->begin();
sym2_it != symsets_it->end(); ++sym2_it) {
if (sym1_it != sym2_it) {
exch_symbol_map.insert(pair<char, char>(*sym1_it, *sym2_it));
}
}
}
}
}
所以這個算法應該在這樣或那樣的工作,表示在這裏。目標是可以稍後輕鬆更改EXCH_SYMBOL_SETS
以包含新組char
s或向現有組添加新字母。謝謝!
當您將較高級別的語言轉換爲較低級別時,會出現許多醜陋,不雅,非慣用的非最佳代碼。你已經習慣了。 – delnan 2011-01-05 11:07:48
你是完全正確的。但問題是,我怎樣處理python中的多維向量?我甚至不知道如何翻譯'L = [A,[B] ,[[C],D]]]'到C++。 ..根本! ...另外,我不需要堅持這個算法。如果可能,我想寫得更好。事情是,即使我已經用C++而不是Python開始了這個項目,我想我也不會想出更好的東西。 – 2011-01-05 11:12:22