C++复制矢量结构,但使用不同的对象
C++ copy a vector structure, but with different objects
我有一个std::string
向量,它表示另一个对象指针向量的结构。我想生成这个对象指针向量,如果有两个相同的对象,则向量中的指针也是相同的。
不知道我刚才是什么意思?我举个例子。假设我有std::string
std::vector
:
std::vector<std::string> names;
names.push_back(std::string("A"));
names.push_back(std::string("A"));
names.push_back(std::string("B"));
names.push_back(std::string("C"));
names.push_back(std::string("A"));
现在假设这些名称(A
、B
和C
(代表一个Object
的三个不同实例:
Object* ptr_A = new Object(1); // A
Object* ptr_B = new Object(2); // B
Object* ptr_C = new Object(3); // C
我现在想生成包含指向Object
的指针的向量,其顺序与向量names
中的顺序相同:
std::vector<Object*> objects;
objects.push_back(ptr_A);
objects.push_back(ptr_A);
objects.push_back(ptr_B);
objects.push_back(ptr_C);
objects.push_back(ptr_A);
这样,当两个名称相同时,指针也相同。
我将如何有效地做到这一点?请注意,我希望在执行此操作的函数中动态分配对象,以便以后可以使用向量。
我将使用它来根据名称从文件中读取对象,但我想防止创建多个基本相同的对象。
由于这是家庭作业,我还不能使用 C++11。
这会生成一个lookup
对象,该对象将名称映射到分配的对象,然后根据 names
中的值填充向量objects
。 简单。
typedef std::map<std::string, Object*>::iterator iterator;
typedef std::pair<std::string, Object*> value_type;
std::map<std::string, Object*> lookup; //or maybe unordered_map
lookup.insert(value_type("A", ptr_A));
lookup.insert(value_type("B", ptr_B));
lookup.insert(value_type("C", ptr_C));
for(int i=0; i<names.size(); ++i) {
iterator iter = lookup.find(names[i]);
if (iter == lookup.end())
throw std::runtime_error("invalid name in file");
objects.push_back(iter->second);
}
如果要从文件生成名称和对象,可以执行类似操作来同时创建名称、对象以及它们之间的映射。 我假设您还必须做其他事情,我不知道您的文件格式。
std::string newname;
std::map<std::string, Object*> lookup; //or maybe unordered_map
while(myfile >> newname)
lookup[newname] = new Object(newname);
不要使用
std::vector
,而是使用包含 std::string
键和 Object*
值的std::map
std::map<std::string, Object*>
映射中不得插入两个相同的键。如果尝试插入与前一个键匹配,则返回原始键值。请求密钥时,将返回相同的指针。
相关文章:
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 了解在 C++ 中分配容器时的对象复制
- C++类对象复制构造函数和运算符=
- 复制 elision/RVO 会导致从同一对象复制/移动吗?
- 如何在循环内将大对象复制到omp任务中?
- 为什么当我添加一个不同的对象(复制构造函数中的参数)时调用复制构造函数?
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 将C++对象复制到指向新指针的指针处
- 将一个 OpenCV OutputArrayOfArrays 对象复制到另一个对象
- 选择性地禁用隐式对象复制
- 不能从文件到指针向量的对象复制
- 从派生对象复制构造
- OpenCV Mat对象复制速度更快
- 将子对象复制到父对象
- 为什么普通的 c++ 编译器不优化对象复制?
- C :将一个对象复制到构造函数中的另一个对象
- 使用命名对象复制构造函数
- 不必要的对象复制 - C++ STL
- 如何将一个类的对象复制到另一个类中