如何检查向量中的索引是否已被使用?
我想要这样的东西:
if(isUsed(vector,index))
do something
else
do something else
示例:
std::vector<int> myVector;
myVector[0] = 5;
myVector[2] = 0;
myVector[3] = 1;
myVector.erase(3);
isUsed(myVector,3) = false
isUsed(myVector,1) = false
isUsed(myVector,2) = true
isUsed(myVector,5) = false
isUsed(myVector,0) = true
或:
std::map<int,std::string> myMap;
myMap[1] = "x";
myMap.count(1) > 0 = true
myMap.count(0) > 0 = false
我希望这个功能很快,因为我正在使用很多索引。
答案 0 :(得分:1)
你可以试试std::unordered_map,它就像一张地图,但对于大多数操作来说要快得多
add_filter( 'woocommerce_default_address_fields' , 'override_default_address_fields' );
function override_default_address_fields( $address_fields ) {
// @ for city
$address_fields['city']['class'] = array('form-row-first');
$address_fields['city']['label'] = __('Province', 'woocommerce');
// @ for postcode
$address_fields['postcode']['label'] = __('Zipcode', 'woocommerce');
return $address_fields;
}
答案 1 :(得分:0)
虽然使用boost :: optional更正,但听起来你可能会要求像std::map<int, Object>
答案 2 :(得分:0)
使用关联数组aka std::map
:
std::map<size_t,int> myVector;
myVector[0] = 5;
myVector[2] = 0;
myVector[3] = 1;
myVector.erase(3);
,您的isUsed()
将等于:
myVector.count(3)
如果你愿意,可以将它包装成函数:
bool isUsed( const std::map<size_t,int> &m, size_t idx )
{
return m.count( idx );
}
如果您不关心迭代容器的顺序,则可以使用std::unordered_map
代替,这将更快,但迭代中元素的顺序将非常随机。
答案 3 :(得分:0)
您可以使用与您在问题中解释问题时使用的完全相同的逻辑。这是创建一个具有矢量大小的bool
向量,然后使用false
s初始化它。
现在每次使用索引时,只需转到bool向量并将该索引更改为true
,表示之前已使用过。您可以检查每个索引的值true || false
,以了解该索引是否在之前使用过。