从std :: vector中选择给定元素之外的元素

时间:2018-09-06 09:00:29

标签: c++ cocos2d-x

我有一个说字符串的std :: vector

    std::vector<std::string> MyVect = {
     "CIRCLE","SQUARE","RECTANGLE","TRIANGLE","LINE"
    };

我正在生成一个字符串。我的问题是,如果生成的字符串是“ SQUARE”,则代码应从MyVect中选择“ SQUARE”以外的任何元素(例如选择CIRCLE或RECTANGLE或TRIANGLE而不是SQUARE)。

我对cocos2d-x和c ++非常陌生。 请帮忙! 谢谢

3 个答案:

答案 0 :(得分:1)

//然后Out向量应该具有除生成的字符串以外的其他元素。

#include <algorithm>
#include <vector>

std::string generated = "SQUARE";
std::vector<std::string> MyVect = {
     "CIRCLE","SQUARE","RECTANGLE","TRIANGLE","LINE"
    };

std::vector<std::string> OutputVect;

for (auto str : MyVect )
{
   if( str != generated)
   {
     OutputVect.push_back(str);
   }
}

答案 1 :(得分:0)

一种解决方案是保留另一个整数类型 choicesUsed 的向量,每次选择一个随机元素时,将向量索引添加到其中。然后,当下次选择随机元素时,请忽略所有选择的索引位于choicesUsed向量内的选择。

答案 2 :(得分:0)

您可以使用<algorithm>标头提供的功能模板,如下所示:

#include <algorithm>
#include <cassert>

std::string generated = "...";

const auto firstNonEqual = std::find_if(MyVec.cbegin(), MyVec.cend(),
    [&generated](const auto& element){ return element != generated; });

assert(firstNonEqual != MyVec.cend());

std::cout << "selected: " << *firstNonEqual << "\n";