1

我有一个成对的向量,一开始是空的。我实现了一个自定义的插入和删除方法,我还希望能够将 NULL 分配给某些元素,但我不能,因为它不是配对的指针。

如果我尝试更具体地说明它 - 给定向量 V

std::vector< std::pair<A,B> > V;

两者都不

    V.assign(number,NULL);

也不

    V[n]=NULL;

会工作。

我需要这样做来检查某个插槽中是否已经保存了一个元素。是否有任何解决方法或者我应该只创建另一个布尔向量来保存 certian 插槽是否已满?

注意:我知道任何类型的地图都可以优雅地解决它,但它必须是矢量。

4

4 回答 4

2

我认为在您的情况下,使用地图的解决方案将是最佳的:

std::map<int, std::pair<A, B> > M;

然后你可以做

M.erase(M.find(number))

对元素进行 NULL 化。

于 2013-07-04T19:15:29.440 回答
1

如果我必须这样做,我会做类似的事情
vector< pair< pair<A,B> ,int > >VV[i].second can be 0 or 1这取决于元素对是否必须为 NULL。如果你想将这对标记为 NULL 但仍然保留它以供参考。否则使用mapAlex1985 所说的。

于 2013-07-04T19:18:33.043 回答
1

我建议你看看 boost::optional

boost::optional< std::vector< std::pair<A,B> > > V;
if (V) {
    // V was initialized
} else {
   // wasn't initialized
}

文档示例: http: //www.boost.org/doc/libs/1_54_0/libs/optional/doc/html/boost_optional/examples.html

于 2013-07-04T19:32:48.183 回答
0

使用 shared_ptr 作为对中的第二种类型。

std::vector< std::pair<A,std::shared_ptr<B> > > V;

V.assign(number, std::shared_ptr<B>());

V[n] = std::shared_ptr<B>();

V[n] = std::shared_ptr<B>(new B());

if (V[n].get() == NULL) { /* 此处为空 */ }

shared_ptr 类在 TR1 中被引入 C++,并且是 C++11 规范的一部分。它适用于标准容器,因为它

于 2013-07-04T19:19:42.413 回答