搜索向量

Searching through a vector

本文关键字:向量 搜索      更新时间:2023-10-16

我有一个向量,vector<Gate*> PI_Gates,可以包含字符 0、1、D、D'(D NOT( 和 X。以下是我到目前为止所做的事情的一个例子:

if(GateType== GATE_NAND)
{   
    for(int i=0; i<PI_Gates.size(); i++)
    {
        if(PI_Gates[i]->getValue() == LOGIC_DBAR)
        {
            MyGate->setValue(LOGIC_D);
        }   
        else if(PI_Gates[i]->getValue() == LOGIC_ZERO)
        {
            MyGate->setValue(LOGIC_ONE);
        }
        else if(PI_Gates[i]->getValue() == LOGIC_X)
        {
            MyGate->setValue(LOGIC_X);
        }
        else if(PI_Gates[i]->getValue() == LOGIC_ONE)
        {
        }
}

此代码用于在门级分析电路并输出结果。对于输入值为 D、0 或 X 的情况,我的输出在当时确定,因为它们将具有逻辑优先级。但是,对于这个特定的逻辑门,如果我的所有输入都是逻辑 1,那么我的输出将是逻辑零。同样,当所有输入都是逻辑 D 时,我的输出将是逻辑 D 而不是。如果输入是逻辑 1 和逻辑 D 的组合,则输出仍然是逻辑 D,而不是逻辑。因此,我需要找到一种方法来搜索我的向量并确定我的输入是否如下:所有逻辑 1、所有逻辑 D、逻辑 1 和 D 的组合。这就是我被困住的地方。我想不出一个好的方法。

我想我是一个更简单的术语,就像你有一个包含数字 1、2、3、4 和 5 的向量,你想检查所有值是 4 还是 5,如果是,当你完成迭代时做一些操作向量。解决方案可能很简单,但我认为我在脑海中将其复杂化了。

提前谢谢。

对于您正在做的事情,一个简单的查找就可以了:

const std::string valid_values[] = 
{ "0", "1", "D", "/D" /* D Not */, "X"};
//...
std::string * const end_ptr = &valid_values[sizeof(valid_values)];
const std::string value = PI_Gates[i]->getValue();
size_t position = find(&valid_values[0], // begin
                       end_ptr, // End
                       value);
if (position != end_ptr)
{
  // The gate name was found
  MyGate->setValue(value);
}

如果你想要更多的多功能性,你可以使用std::map<string, function pointer>并将函数与门名相关联。 包含门名称和函数指针的结构表也可以工作。