2014-05-02 69 views
1

我有一個avl樹,其中包含包含字符串標識符的對象。返回False或值C++

我有一個用戶輸入一個字符串,然後我想分析樹,看看用戶字符串是否與樹標識符中的任何對象相匹配。如果沒有與用戶字符串匹配的標識符的對象,我想創建一個標識符設置爲用戶字符串的對象。如果具有標識符的對象與用戶的輸入匹配,我想將該對象返回給用戶。目前,我有兩個函數,一個返回一個布爾值,如果該對象已存在於樹中,另一個返回該對象至控制檯(如果該對象已存在於樹中)。有沒有辦法將這兩個步驟合併到一個函數中?我在尋找的東西,如:

if(...) // the item exists in the tree 
{ 
    //return the object 
} 
else 
{ 
    avltreeObject.insert(user_string); 
} 
+2

爲什麼不在'else'情況下返回新插入的對象?如果你還需要返回一個狀態(找到或插入),或者有一個布爾返回值並使用一個傳遞的對象引用參數並設置它,或者你可以返回一個['std :: pair'](http:// en。 cppreference.com/w/cpp/utility/pair),狀態爲「first」,對象爲「second」。 –

+0

通常,如果對象不存在,則檢索函數返回null,因此您可以調用此函數並根據該函數區分進一步的處理。 – laune

+1

你可能會遵循std :: map的實現 –

回答

2

使返回類型std::pair<bool, Object>

if(/*the item exists in the tree*/) 
{ 
    return std::make_pair(false, object); 
} 
else 
{ 
    avltreeObject.insert(user_string); 
    return std::make_pair(true, object); 
} 
0

事情是這樣的:

Object obj = avltreeObject.retrieve(user_string); 
if(object != 0){ 
    return obj; 
} else { 
    avltreeObject.insert(user_string); 
    return avltreeObject.retrieve(user_string); 
} 

insert函數可能返回新創建的對象,所以這可以被改善。