我在比較兩個向量中的值時遇到了問題。向量迭代器比較
以下是我的程序的示例代碼:
template <typename T> bool CompareVectors(std::vector<T> vector1, std::vector<T> vector2)
{
std::sort(vector1.begin(),vector1.end());
std::sort(vector2.begin(),vector2.end());
if (vector1.size() != vector2.size())
return false;
else
{
bool found = false;
std::vector<T>::iterator it;
std::vector<T>::iterator it2;
for (it = vector1.begin();it != vector1.end(); it++)
{
for(it2 = vector2.begin(); it2 != vector2.end(); it2++)
{
if(it == it2) // here i have to check the values in the itearators are equal.
{
found = true;
break;
}
}
if(!found)
return false;
else
found = false;
}
return true;
}
};
在此示例代碼中,我有兩個向量進行比較。爲此,我使用std::sort()
對兩個向量進行了排序。由於向量中的數據類型是模板(我在向量中使用類對象),因此std::sort()
無法正常工作。也就是說,有時這兩個向量在排序後給出不同的元素順序。
所以我不能使用std::equal()
函數也。
對於另一種解決方案,我已經爲twi向量使用了兩個迭代器。
並迭代一個矢量並在另一個矢量中搜索該元素。爲此迭代器比較是不可用的。
你是如何實現'operator <'進行排序的?這可能是你的問題...我敢打賭,你有一個指針向量,你的項目按照他們的地址而不是他們的值進行排序。 – 2012-03-12 04:55:44
您是否爲您正在使用的類定義了「<」和「==」運算符? – howardh 2012-03-12 04:56:42
yaa我定義了==,<,!=運算符爲我正在使用的類 是的......我在向量中使用poinetr元素進行比較。因此,std :: sorting的問題。所以它是按地址排序的。 – 2012-03-12 05:03:16