• [UE4]集合:TSet容器


    一、TSet<T>是什么

    UE4中,除了TArray动态数组外,还提供了各种各样的模板容器。这一节,我们就介绍集合容器——TSet<T>。类似于TArray<T>,尖括号里面的T是模板类型,可以是任何C++类型。一个集合表示了一组互不重复的数据元素。比如TSet<float>表示了一组float集合,TSet<FString>表示了一组FString集合。

    二、创建和填充集合

    因为这些容器在设计的时候考虑到一致性,所以后面你在学习各种各样的容器,你都会发现它们都具有相同或相似的函数,调用方法也是大同小异。类似TArray,TSet也有Add函数和Emplace函数,举个例子:

    TSet<int> set;
    set.Add( 1 );
    set.Add( 2 );
    set.Emplace( 3 );
    set.Add( 1 );// 这个操作虽然可以编译运行,但是因为其元素已经存在,所以不会对现有集合发生影响
    set.Emplace( 2 );// 同上

    注意,集合的内部数据结构是二叉树,而不是简单地按编号排序的,因此不能通过方括号[]来访问集合中的元素。

    //set[0] = 4; //试图通过[]操作符来访问集合元素,但这样的操作是非法的

     Tset中也有类似于TArray的Push函数,但是不叫Push,那就是Append函数,用法也是和Push一样的。

    void Append( const TArray< ElementType > & InElements )
    void Append( TArray< ElementType > && InElements )

    三、迭代集合

    因为TSet不能通过[]来访问容器里面的元素,所以也不能通过数值来迭代集合。因此我们要通过迭代器来访问集合:

    for( TSet<int>::TIterator it = set.CreateIterator(); it; ++it ){
        GEngine->AddOnScreenDebugMessage( -1, 40.f, FColor::White, FString::FromInt( *it ) );
    }

    四、两个集合的操作

    1) 交集

    TSet中的Intersect函数提供了计算出两个集合的交集操作,下面是其函数声明:

    TSet Intersect( const TSet & OtherSet )

    示例:

    TSet<int> X;
    X.Add( 1 );
    X.Add( 2 );
    X.Add( 3 );
    TSet<int> Y;
    Y.Add( 2 );
    Y.Add( 3 );
    Y.Add( 4 );
    TSet<int> intersection = X.Intersect(Y); // intersection的内容为{2,3}

    2) 并集

    TSet中的Union函数提供了计算出两个集合的并集操作,下面是其函数声明:

    TSet Union( const TSet & OtherSet )

    示例:

    TSet<int> uni = X.Union(Y); // uni的内容为{1,2,3,4}

    容器的功能可谓非常强大的,上面只是列举其常用的一二,在官方的文档中有全面的介绍。同时我们也认识到,容器的学习也是非常简单的,只要多加练习和查询文档便可。

  • 相关阅读:
    第一讲小结(位运算)
    新学期开始
    前缀表达式-怎样用空格分隔一个字符串
    计概期末前的小小总结
    动规作业-求数组不相邻元素之和的最大值
    网格-递归作业2-放苹果问题
    1025 数的划分(搜索和递推方法)
    网格-递归作业 集合里的乘法
    网格-递归作业 城堡问题
    去先导零的一个大坑
  • 原文地址:https://www.cnblogs.com/timy/p/8641789.html
Copyright © 2020-2023  润新知