我正在寻找一个最好执行等于 O(1) 的数据结构?在添加/删除/检索元素时适用于任意数量的元素。
这里有一些额外的指导方针,
- 检索元素不应涉及缓慢
keys()
- 元素必须始终唯一且已定义
- 元素顺序不重要
- 添加或删除元素不应涉及对其他元素的迭代
- 检索到的元素列表中的间隙是可以容忍的,并且可以用
undef
值表示
请提出更好的解决方案,
sub uniqArrayFactory {
my $members = [];
my $seen = {};
my $gaps = [];
return sub {
my (%arg) = @_;
return $members if $arg{members};
my $m;
if (defined ($m = $arg{del})) {
return if !$seen->{$m};
${ $seen->{$m} } = undef;
push @$gaps, delete($seen->{$m});
}
elsif (defined ($m = $arg{add})) {
return if $seen->{$m};
if (@$gaps) {
$seen->{$m} = pop @$gaps;
${ $seen->{$m} } = $m;
}
else {
push @$members, $m;
$seen->{$m} = \( $members->[-1] );
}
}
return $m;
};
}
更新(使用)
my $fa = uniqArrayFactory();
$fa->(add => 10);
$fa->(del => 10);
my $members = $fa->(mebers => 1);