You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中是否存在类似C++ std::set的有序集合类型?

Delphi 有序整数集合类实现方案

Delphi 内置的set类型属于位集结构,语法层面限定仅支持取值范围不超过0~255的序数类型,因此你声明set of Integer时会触发元素上限的编译错误,这是内置集合类型的固有约束,无法调整。

针对有序整数存储、快速存在性检索的需求,可采用以下官方原生方案:

1. 优先使用泛型 TOrderedSet<T> 类

Delphi XE 及以上版本自带的System.Generics.Collections单元提供了泛型有序集合TOrderedSet<T>,实现逻辑和C++的std::set完全一致,底层采用红黑树结构:

  • 元素自动按升序(可自定义排序规则)存储
  • 插入、删除、存在性检查的时间复杂度均为O(log n)
  • 无256元素上限限制,支持整数等任意可比较类型

使用示例如下:

uses
  System.Generics.Collections;

procedure TestIntSet;
var
  IntSet: TOrderedSet<Integer>;
begin
  IntSet := TOrderedSet<Integer>.Create;
  try
    // 插入整数元素
    IntSet.Add(12);
    IntSet.Add(3);
    IntSet.Add(45);
    
    // 快速检索元素是否存在
    if IntSet.Contains(3) then
      Writeln('元素3存在');
      
    // 遍历会按从小到大的顺序输出:3、12、45
    for var Num in IntSet do
      Writeln(Num);
  finally
    IntSet.Free;
  end;
end;

2. 低版本Delphi兼容方案

如果你使用的是XE之前无泛型支持的Delphi版本,可以选择以下两种替代方案:

  • 整数取值范围可控时,使用TBits类,通过下标判断元素是否存在,检索效率为O(1)
  • 整数范围较大时,使用TList存储整数,插入时手动维护有序性,查找时调用BinarySearch二分查找接口,检索效率为O(log n)

内容的提问来源于stack exchange,提问作者Bruice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 06:15:03