2017-06-12 15 views
-4

我已經創建了下列比較測試圖的所有元素:C++地圖定製比較器不插入

struct comparator{ 
    bool operatior() (int a,int b){ 
     return 1; 
    } 
} 

則以下algorthim:

int main(){ 
    // imports string to currentString 
     ... 
    std::map<int,char> default_map; 
    std::map<int,char,comparator> test_map; 

    while(i < stringSize){ 
     if(currentString[i] == '(' || currentString[i] == ')'){ 
      default_map[i]=currentString[i]; 
      test_map[i]=currentString[i]; 
     } 
    } 

    auto currentIterator = default_map.begin(); 
    while(currentIterator != default_map.end()){ 
     printf("%d %c\n",currentIterator->first,currentIterator->second); 
    } 

    auto currentIterator = test_map.begin(); 
    while(currentIterator != test_map.end()){ 
     printf("%d %c\n",currentIterator->first,currentIterator->second); 
    } 

    return 0; 
} 

這裏default_map打印所有括號的,而具有自定義比較器的test_map僅打印前兩個括號。

這是地圖代碼中的錯誤嗎? 我原本想用自定義比較器將類作爲鍵,但它甚至沒有使用自定義int鍵。

我的make文件確實使用-std = C++ 1y標籤,所以這可能會影響它? 我不知道該怎麼做。我正在考慮查看SGI地圖是否會比標準地圖效果更好。

回答

1

您的「比較器」(拼寫錯誤的「運算符」)始終返回1。您如何期望有用地確定地圖中是否已有東西或其正確的排序? (提示:不會)。

您需要編寫一個函數,實際上是以有用的方式比較元素。

比較功能需要實現strict weak ordering才能在map中使用。

+0

謝謝。我爲比較器做了這樣的事情: if(a> b)return 1; else if(a == b)return 0; else return -1; – Henrickunit

+0

那麼如果兩個元素相等會發生什麼?我想它只是切換a和b來檢查。好吧有道理。 – Henrickunit

1

您需要正確實施比較功能。

struct comparator{ 
    bool operatior() (int a,int b){ 
     return (a < b); 
     // return 1; 
    } 
} 

否則,它不符合排序映射鍵的標準。