2016-04-26 10 views
0

私はmySizeというメンバ変数を持っていますが、マップのサイズとの差、たとえばmyMapを計算したいと思います。 mySizeを宣言するときはどのタイプを使用しますか?私は今uint32_tを使用しています。 例えば、 myClass.hにおいて:map.size()で計算されるint型を宣言する方法

static uint32_t getDifference(std::map<string, int> myMap); 
    static uint32_t mySize_; 

myClass.cppにおいて:

uint32_t getDifference(std::map<string, int> myMap){ 
    return std::abs(mySize_ - myMap.size()); 
} 

UPDATE:上記のコードに重大なバグ。 std::absuint32_tには使用できません。しかし、これはあまり問題に関連していません。 uint32_tの代わりにstd::size_tを使用してください。

+3

このタイプは 'size_t'です。 –

+5

地図全体をコピーしてサイズを尋ねるだけですか?それはかなりオリジナルです – Slava

+1

参照を確認してみませんか:['std :: map'](http://en.cppreference.com/w/cpp/container/map)、[' std :: map :: size () '](http://en.cppreference.com/w/cpp/container/map/size)を参照してください。代わりに、ソースコード – Drop

答えて

1

[この情報をできるだけ多くコミュニティのwikiは既にコメントとして掲載されます]

それは次のようになります。

std::map<string, int>::size_type getDifference(const std::map<string, int>& myMap) 
{ 
    return mySize_ >= myMap.size() ? mySize_ - myMap.size() 
            : myMap.size() - mySize_; 
} 

2 - 3のような減算を避けるために、大きいチェック上記のコード、unsigned型のために-1を表すことができないため、非常に大きな数値が生成されます。abs()はそれを防ぐには遅すぎます。非常に大きな数値には何もしません。

実際には、size_tを使用すると、入力と読み込みが容易になり、ほとんどの場合実装でsize_typeが使用されますが、それにかかわらず十分です。

関連する問題