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()?
答案 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.
}