2011-12-03 5 views
0
map<string, pair<int, int> > common;  
map<string, pair<int, int> >::iterator cIter = common.find(code); 
     if(cIter == common.end()) 
     { 
      pair<int, int> values(1, count); 
      common.insert(make_pair(code, values)); 
     } 
     else 
      cIter->second.first++; 

誰でも私は上記のコードをJavaに変換できますか?C++のマップとJavaエントリ

private java.util.HashMap<String, Entry<Integer, Integer>> common = new java.util.HashMap<String, Entry<Integer, Integer>>(); 
Entry<Integer, Integer> cIter = common.get(code); 
      if (cIter == common.) { 
       Entry<Integer, Integer> values = new AbstractMap.SimpleEntry<Integer, Integer>(1, count); 
       common.put(code, values); 
      } else { 
       cIter.second.first++; 
      } 

これは私が試したことですが、2番目はgetValues()を意味し、最初はgetKey()を意味しますか?

+0

最初のコードは何ですか? * Javaのように見えますが、C++のように見えます。 –

+0

C++申し訳ありませんが、間違ったコードを投稿したと思います。私は以下のコードを変換しようとしました。 – user236501

答えて

0

Javaはペアタプルクラスを持っていませんし、エントリの "キー"を更新する必要がありますので、Entryを使用することが最良の選択です。

代わりに、これを行うためのクラスを作成する必要があります。

class Counters { 
    int counter1; // use meaningful names here 
    final counter2; 
    public Counters(counter1, counter2) { this.counter1 = counter1; this.counter2 = counter2; } 
} 

Map<String, Counters> common = new HashMap<>(); 

Counters counters = common.get(code); 
if (counters == null) 
    common.put(code, counters = new Counters(1, count)); 
else 
    counters.counter2++; 

IF(itr.second.first> MAX){最大= itr.second.first。 minCount = itr.second.second;コード= itr.next()。getKey(); }

if(counters.counter1 > max) { 
    max = counters.counter1; 
    minCount = counters.counter2; 
    code = null; // isn't needed AFAIK. 
} 
+0

こんにちは、ありがとう、私は別のコードを持っています:私は非常にgetValueまたはgetKeyまたはcounter1とcounter2です最初と2番目と混同されていますか?手伝ってくれますか? if(itr.second.first> max){ max = itr.second.first; minCount = itr.second.second; コード= itr.next()。getKey(); } – user236501

+0

Javaがペアを持たない理由の1つである第1と第2と非常に混同されています。 ;) –

+0

おかげであなたのcounter2は実際に値を参照していますか?とC + +ペアの最初の実際にキーと2番目の値を参照して参照してください私は右ですか? – user236501

0

JavaのHashmap get関数は、マップにキーが含まれていない場合はnullを返します。それは上記のあなたのJavaコードのギャップと思われる。参照:一部の人々は、小さなクラスを使用することをお勧めし http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

注意ではなく(実際にはマップ内のキー/値のペアを表すことを意図していた)のエントリのような一般的な構造を使用するようにしてください。参照してください:What is the equivalent of the C++ Pair<L,R> in Java?

+0

CIter-> second.first ++とは何ですか? – user236501

+0

Entryクラスを再利用している場合は、/ setValueを取得すると思います。参照:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Map.Entry.html。セマンティクスが正しいとは思われないので、上記のStackoverflowリンクのペアクラスの1つ、またはEntryクラスではなく独自のクラスを使用する方が良いかもしれません。 –