zoukankan      html  css  js  c++  java
  • [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}

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

  • 相关阅读:
    常用Linux基础命令
    makefile基础
    获得当前的时间——system.currentTimeMillis()
    MapReduce提供的输入输出格式
    Hadoop HDFS文件操作的Java代码
    Hadoop2.2.0完全分布式配置
    Hadoop2.2.0伪分布模式配置
    Eclipse Plugin for Hadoop2.2.0
    Hadoop2.2.0单机模式配置
    Asp.Net 禁用cookie后使用session
  • 原文地址:https://www.cnblogs.com/timy/p/8641789.html
Copyright © 2011-2022 走看看