目前試圖排序對象的矢量,其中每個對象包含字符串,在C++重載對比操作者在C++中的結果「無效操作者<」
的字符串可以包含字母或數字(由於設計限制,這是必要的,因爲可以改變比較器)。
此刻,對象的類被重載,因此當兩個對象進行比較時,它們所包含的字符串將進行比較。這可以起到一定的作用 - 然而,當我使用排序操作(如STL排序)來排列對象時,它會按順序排序三個字符串,例如「1」,「4」,「12」 「1」,「12」,「4」。 4大於12,但由於它從最左邊的數字開始比較,所以發生這種「不正確的」排序。
我最初的反應是改變我如何重載比較操作。我會首先檢查我正在比較的字符串的長度 - 如果字符串的內容更大或更小,這將是一個指示符號。
// overloaded comparision operators
friend bool operator<(const nodeRecord & record1, const nodeRecord & record2){
// we need to deal with strings of different lengths...
if(record1.comparator.length() < record2.comparator.length())
return true;
else
return (record1.comparator < record2.comparator);
}
此操作在運行時會產生「表達式:無效的運算符<」消息。
有關我在哪裏犯錯的任何想法?看起來,我應該能夠向操作指示我想要如何進行排序操作 - 即使它無效,因爲我當前正在使用矢量來包含對象。在nodeRecord對象的初始化過程中
比較:
nodeRecord(int fromNode, int toNode, int connectionCost, bool compareByCost = false){
// take the provided stock information and insert it into the object
stringstream fromNodeSS;
fromNodeSS << fromNode;
this->fromNode = fromNodeSS.str();
stringstream toNodeSS;
toNodeSS << toNode;
this->toNode = toNodeSS.str();
this->connectionCost = connectionCost;
// set the comparator to our chosen comparision term
if (!compareByCost){
this->comparator = this->fromNode; // we use from node in this case, since we build the tree outwards
}
else{
stringstream ss;
ss << this->connectionCost;
this->comparator = ss.str(); // we use the connection cost in this case, to allow us to sort new connections
}
// set this as a non-null (active) record
this->nullRecord = false;
}
有什麼比較?發佈代碼。 – 2011-04-26 05:29:50
你能不能顯示比較器的定義? – 2011-04-26 05:45:09
@Mike和@Mario - 比較器在初始化nodeRecord對象期間初始化。你可以看到上面的內容。 – BSchlinker 2011-04-26 05:50:31