当前位置: 首页 > 知识库问答 >
问题:

如何为增加或减少对象分配唯一标识符

徐奇
2023-03-14

我想有一个唯一的ID为每个对象,但与此代码增加但不减少,我如何才能有一个唯一的ID依赖于存在的对象的数字。

#include <iostream>
#include <vector>

class UniqueID {
protected:
    static int nextID;
public:
    int id;
    UniqueID();
    ~UniqueID();
    UniqueID(const UniqueID& orig);
    UniqueID& operator=(const UniqueID& orig);
};

int UniqueID::nextID = 0;

UniqueID::UniqueID() {
    id = ++nextID;
}

UniqueID::~UniqueID() {

}

UniqueID::UniqueID(const UniqueID& orig) {
    id = orig.id;
}

UniqueID& UniqueID::operator=(const UniqueID& orig) {
    id = orig.id;
    return(*this);
}

int main()
{

    std::vector<UniqueID> UniqueIDs;

    for (int i = 0; i < 3; i++)
    {
        UniqueID e;
        UniqueIDs.push_back(e);
        std::cout <<"Create "<< e.id << std::endl;
    }
    std::cout << "\n";

    //Delete..
    for (int b = int(UniqueIDs.size()) - 1; b >= 0; b--)
    {

        std::cout << "Delete "<< UniqueIDs[b].id << std::endl;
        UniqueIDs.erase(UniqueIDs.begin() + b);
    }

    std::cout << "\n";

    //Here the new object should get the ids for 1 to 4 
    for (int i = 0; i < 3; i++)
    {
        UniqueID e;
        UniqueIDs.push_back(e);
        std::cout << "Create " << e.id << std::endl;
    }
}

输出为:

Create 1
Create 2
Create 3

Delete 3
Delete 2
Delete 1

Create 4
Create 5
Create 6

我希望:

Create 1
Create 2
Create 3

Delete 3
Delete 2
Delete 1

Create 1
Create 2
Create 3

共有1个答案

杜彦君
2023-03-14

ID通常不会这样重复使用是有原因的,这是因为您必须保留一个备用ID的集合,或者保留一个使用过的ID的集合,而且这不会扩展(除非您人为地将自己限制在少量的“插槽”中)。

数据库只需自动递增到整数范围的顶部,然后返回(您不太可能同时拥有40亿个对象!)。 在代码中,通常只使用对象的地址,该地址已经保证在其生存期内是唯一和稳定的。

 类似资料:
  • 我不确定在进行聚合操作时应该增加还是减少分区数量。假设我正在使用pyspark数据框架。。 我知道行转换通常需要更多的分区。而将数据保存到磁盘通常需要fewere分区。 但是,对于聚合,我不清楚在中做什么?? 增加分区数的参数:由于我们必须为聚合而洗牌数据,因此您希望洗牌更少的数据,从而增加分区数,以减小分区的大小。 减少分区数量的论点:IT需要大量开销来收集和计算每个分区。因此,太多的分区将导致

  • 本文向大家介绍Kafka 分区数可以增加或减少吗?为什么?相关面试题,主要包含被问及Kafka 分区数可以增加或减少吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 我们可以使用 bin/kafka-topics.sh 命令对 Kafka 增加 Kafka 的分区数据,但是 Kafka 不支持减少分区数。 Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,

  • 问题内容: 我需要做一些实验,并且需要知道javascript中对象的某种唯一标识符,因此我可以查看它们是否相同。我不想使用相等运算符,我需要类似python中的id()函数的功能。 是否存在这样的东西? 问题答案: 更新 我下面的原始答案写在6年前,其风格与时代和我的理解相吻合。为了回应评论中的某些对话,一种更现代的方法如下: 如果您对旧版浏览器有要求,请在此处查看的浏览器兼容性。 原始答案保留

  • 问题内容: 这将类似于该方法。 我需要将无法控制的对象存储在一个集中,并确保只有两个对象实际上是同一对象(不包含相同的值)时,这些值才会被覆盖。 问题答案: 会帮你的忙。但我很好奇,对象集(按值组合对象)有什么问题? 对于您的特定问题,我可能会保留一组ID或包装对象。包装对象将包含一个引用,并按<==>进行比较。 还值得注意的是,Python对象也具有功能。该功能对于将对象放入集合或字典是必需的。

  • 问题内容: 如何使用Java增加输出的WAV音频流的音量?我在使用各种Java TTS引擎和合成语音的输出量时遇到问题。有可以用来调高音量的API调用或doo- hickey.jar吗? 问题答案: 如果您使用的是Java Sound API,则可以使用MASTER_GAIN控件设置音量。

  • 接口说明 该接口由变现猫开放给开发者,开发者进行调用 接口地址:https://api.bianxianmao.com/waji/user/changeWabi 请求方式:POST 请求参数: 参数 是否必须 参数类型 限制长度 参数说明 appUid yes string 255 app用户id appKey yes string 255 接口appKey,应用的唯一标识 amount yes

  • 问题内容: 我有一个看起来像这样的表: 并且我想计算出上一日期的column的增加/减少百分比。例如,结果将是这样的, 我已经搜寻并绞尽脑汁了几天。通常,我只是使用服务器端代码来完成此操作,但是现在我需要将其全部包含在查询中。 问题答案: 试试这个:

  • 问题内容: 说我想对中的每个元素求和。 我有理由相信,斧头在某些时候是不确定的。 以下工作正常 我在第一个示例中做错了什么? 问题答案: 第一次迭代后,您将返回一个数字,然后尝试获取该数字的属性以将其添加到下一个对象中,该对象是和数学,其中涉及结果。 尝试返回一个对象,该对象包含一个属性,该属性与参数的x个属性之和: 从注释中添加了说明: 每次迭代的返回值在下一次迭代中用作变量。 迭代1: ,,