当前位置: 首页 > 面试题库 >

Java等效于C ++ equal_range(或lower_bound和upper_bound)

百里雅珺
2023-03-14
问题内容

我有一个排序的对象列表,我想找到一个对象的第一次出现和最后一次出现。在C ++中,我可以轻松使用std ::
equal_range(或仅使用一个lower_bound和一个upper_bound)。

例如:

bool mygreater (int i,int j) { return (i>j); }

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};
  std::vector<int> v(myints,myints+8);                         // 10 20 30 30 20 10 10 20
  std::pair<std::vector<int>::iterator,std::vector<int>::iterator> bounds;

  // using default comparison:
  std::sort (v.begin(), v.end());                              // 10 10 10 20 20 20 30 30
  bounds=std::equal_range (v.begin(), v.end(), 20);            //          ^        ^

  // using "mygreater" as comp:
  std::sort (v.begin(), v.end(), mygreater);                   // 30 30 20 20 20 10 10 10
  bounds=std::equal_range (v.begin(), v.end(), 20, mygreater); //       ^        ^

  std::cout << "bounds at positions " << (bounds.first - v.begin());
  std::cout << " and " << (bounds.second - v.begin()) << '\n';

  return 0;
}

在Java中,似乎没有简单的对等关系?我应该如何与等距离

List<MyClass> myList;

顺便说一句,我正在使用标准的import java.util.List;。


问题答案:

在Java中,您可以Collections.binarySearch在排序列表中查找相等范围的下限(Arrays.binarySearch为数组提供类似的功能)。然后,您将继续线性迭代,直到达到相等范围的终点。

这些方法适用于实现Comparable接口的方法。对于未实现的类Comparable,您可以提供一个
自定义
实例,Comparator以比较特定类型的元素。



 类似资料:
  • 问题内容: 我正在开发Java程序,我确实需要能够以一定的频率和持续时间播放声音,类似于c#方法System.Beep,我知道如何在C#中使用它,但是我找不到用Java做到这一点的一种方法。是否有等效的方法或另一种方法? 问题答案: 我认为没有办法在便携式2 Java 中用“哔”声播放音乐1。您将需要使用我认为的API …除非找到可以为您简化事情的第三方库。 如果您想走这条路,那么此页面可能会给您

  • 条款45:注意count、find、binary_search、lower_bound、upper_bound和equal_range的区别 你要寻找什么,而且你有一个容器或者你有一个由迭代器划分出来的区间——你要找的东西就在里面。你要怎么完成搜索呢?你箭袋中的箭有这些:count、count_if、find、find_if、binary_search、lower_bound、upper_boun

  • 问题内容: 我有以下用于加密的c ++代码片段: Java中的c ++加密等效于什么? 我看到有算法,然后我看到。 这与openssl加密有关。但不知道什么是等效的。本质上,我想要与c ++代码生成的输出相同的输出。 我问什么是等效的或在这里使用的加密名称是什么,所以我可以从那里得到它。 编辑:不要求任何人将代码转换为Java,而只是要求执行相同操作的相应程序包或类。 问题答案: 您要转换的代码使

  • 问题内容: 我是一名普通的C#开发人员,但有时我会使用Java开发应用程序。我想知道是否有Java等效于C#async / await?简单来说,java相当于什么: 问题答案: 不,在Java中-甚至在v5之前的C#中,都没有等效的异步/等待方式。 在后台构建状态机是一项相当复杂的语言功能。 Java中对异步/并发的 语言 支持相对较少,但是该软件包包含许多与此相关的有用 类 。(不完全等同于任

  • 问题内容: 我有以下用Java编写的代码。我需要与此等效的C#。 问题答案: 这里的C#代码等效于Java。

  • 问题内容: 我想将Java中的类转换为C#,大部分更改已经完成,但是我不确定这部分。我想转换以下代码行: 我已经试过了: 但是它不能正常工作,因为GetBytes()期望翻倍。我不确定将其转换为双精度是否可以解决问题,所以我想在这里询问。 问题答案: 根据您的编码,您可以执行以下操作: 有关参考,请参见http://msdn.microsoft.com/zh- cn/library/ds4kkd5