C ++ Map和Java Entry

时间:2011-12-03 06:45:57

标签: java c++ hashmap

  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吗?

 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++;
            }

这是我试过的第二个意思是getValues(),第一个意思是getKey()?

2 个答案:

答案 0 :(得分:0)

如果地图不包含密钥,Java的Hashmap get函数将返回null。这似乎是上面的java代码中的差距。看到: http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

请注意,有些人建议使用小类,而不是尝试使用像Entry这样的通用结构(实际上它用于表示Map中的键/值对)。请参阅:What is the equivalent of the C++ Pair<L,R> in Java?

答案 1 :(得分:0)

Java没有Pair元组类,我不确定在这种情况下使用Entry是最好的选择,因为你需要更新Entry的“key”。

相反,您应该创建一个类来执行此操作。

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&gt; max){max = itr.second.first; minCount = itr.second.second; code = itr.next()。getKey(); }

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