0
我遇到了一個奇怪的問題,它使用標準的C++庫元素映射和向量來創建一些簡單的代碼。比較std :: vector時出錯Size
我有一個圖表,表示爲map<int, Edgelist>
,其中Edgelist定義爲vector<int>
。如果pattern
包含在subject
中,我也有一個match
函數用於比較兩個圖表並返回true
。
的代碼是一個更大的應用程序的一部分,但出現此問題的最小編譯樣本是在這裏:
#include <vector>
#include <iostream>
#include <map>
typedef int Vertex;
typedef std::vector<Vertex> EdgeList;
typedef std::map<Vertex, EdgeList> PatternGraph;
typedef std::vector<Vertex>::iterator EdgeListIter;
typedef std::map<Vertex, EdgeList>::iterator GraphIter;
const Vertex ROOT = 1;
bool match(PatternGraph &pattern, Vertex p_start,
PatternGraph &subject, Vertex s_start)
{
int num_p, num_s;
num_p = pattern[p_start].size();
num_s = subject[s_start].size();
if (pattern[p_start].size() == 0)
return true;
if (subject[s_start].size() == 0)
return false;
if (pattern[p_start].size() != subject[s_start].size())
return false;
if (pattern[p_start].size() == 1) {
Vertex pattern_child, subject_child;
pattern_child = pattern[p_start][0];
subject_child = subject[s_start][0];
return match(pattern, pattern_child, subject, subject_child);
} else {
Vertex p1, p2, s1, s2;
p1 = pattern[p_start][0];
p2 = pattern[p_start][1];
s1 = subject[s_start][0];
s2 = subject[s_start][1];
return ((match(pattern, p1, subject, s1) && match(pattern, p2, subject, s2)) ||
(match(pattern, p2, subject, s1) && match(pattern, p1, subject, s2)));
}
}
bool test_match()
{
bool passed = true;
std::cout << "Running Match Test...";
PatternGraph p1, p2, p3;
p1[1] = std::vector<int>(2,3);
p1[2] = std::vector<int>(4,5);
p1[3] = std::vector<int>();
p1[4] = std::vector<int>();
p1[5] = std::vector<int>();
p2[1] = std::vector<int>(2,3);
p2[2] = std::vector<int>(4,5);
p2[3] = std::vector<int>();
p2[4] = std::vector<int>();
p2[5] = std::vector<int>();
p3[1] = std::vector<int>(2);
p3[2] = std::vector<int>(3,4);
p3[3] = std::vector<int>();
p3[4] = std::vector<int>();
if (!match(p1, ROOT, p2, ROOT)) {
std::cout << "P1 Does not Match P2 when it should" << std::endl;
passed = false;
} else if (match(p2, ROOT, p3, ROOT)) {
std::cout << "P2 matches P3 when it shouldn't" << std::endl;
passed = false;
} else {
std::cout << "Match Test Passed." << std::endl;
}
return passed;
}
int main(int argc, char *argv[])
{
test_match();
return 0;
}
輸出「運行匹配測試... P2 P3相匹配時,它不該」 T」 我已經調試此代碼後發現,由於某些原因,當match(p2, ROOT, p3, ROOT)
被調用的p2[1]
和p3[1]
大小都等於2
,當p2[1]
應等於2
和p3[1]
應該等於1
。
我難住,任何幫助表示讚賞。我使用的編譯器是蘋果公司的克++ 4.2.1
:
這與初始化爲2的一個元件創建矢量D'哦。我知道這是愚蠢的。謝謝一堆。我會的時候會接受這個 – Kevin 2011-05-03 17:52:35