相当于C++;Java中的map.lower_界限
我的问题很基本,但我自己找不到答案 我习惯于在C++中编写算法。在那里,我经常使用相当于C++;Java中的map.lower_界限,java,c++,map,treemap,Java,C++,Map,Treemap,我的问题很基本,但我自己找不到答案 我习惯于在C++中编写算法。在那里,我经常使用std::map结构以及它提供的所有辅助方法 此方法将迭代器返回给映射的第一个元素,键>=返回给作为参数给定的键。例如: map<int, string> m; // m = { 4 => "foo", 6 => "bar", 10 => "abracadabra" } m.lower_bound(2); // returns iterator pointing to <4, "
std::map
结构以及它提供的所有辅助方法
此方法将迭代器返回给映射的第一个元素,键>=返回给作为参数给定的键。例如:
map<int, string> m;
// m = { 4 => "foo", 6 => "bar", 10 => "abracadabra" }
m.lower_bound(2); // returns iterator pointing to <4, "foo">
m.lower_bound(4); // returns iterator pointing to <4, "foo">
m.lower_bound(5); // returns iterator pointing to <6, "bar">
map-m;
//m={4=>“foo”,6=>“bar”,10=>“abracadabra”}
m、 下界(2);//返回指向的迭代器
m、 下界(4);//返回指向的迭代器
m、 下界(5);//返回指向的迭代器
很酷的是C++图是基于红黑树的,所以查询是对数的(<代码> O(log n)< /代码>)。
现在我需要用Java实现一个特定的算法。我需要与我刚才描述的功能类似的功能。我知道我可以使用在有序树中实现的TreeMap
。然而,我似乎找不到与方法下限
等效的方法。有这样的情况吗
非常感谢您的帮助。我希望这对您有用吗
SortedMap tail = <Sorted Map Object>.tailMap(target);
if (!tail.isEmpty())
{
upper = tail.firstKey();
}
SortedMap tail=.tailMap(目标);
如果(!tail.isEmpty())
{
upper=tail.firstKey();
}
我想你在找。看看ceilingKey/Entry方法。这是一个显示行为的测试用例:
@Test
public void testPrefixMatch() {
treeMap.put("1.2.3", "bar");
treeMap.put("1.2.3.4", "bar");
treeMap.put("1.2.3.5.6", "bar");
assertEquals("1.2.3.5.6", treeMap.ceilingKey("1.2.3.4.5.6.7"));
assertEquals("1.2.3.4", treeMap.floorKey("1.2.3.4.8.6"));
assertEquals("1.2.3.5.6", treeMap.ceilingKey("1.2.3.4.8.6"));
}
有点类似:
在C中++
vector lower_bound return the index
在爪哇
TreeSet higher return the Key
谢谢,我应该仔细看一下,但我不知怎么地认为它应该是直接在
TreeMap
中声明的方法。我认为ceilingEntry
方法与std::lower\u bound
完全等效,虽然lowerEntry
非常相似,但仍然不同。这似乎比@Nikola的建议更耗费资源,更难使用。事实证明,你是真正帮助我的人,因为我正在为android和上述方法(“lowerEntry”)开发在什么意义上你是说他的建议不正确?我想他的建议和你的完全一样。建议是使用天花板。FLUROKEY是使用权。我认为你对C++中的代码> > LoeLoWix/<代码>的理解是错误的。它实际上获取给定键的第一个键>=我明白了。你是对的,修改了答案。谢谢你的指点