问题描述
在PHP中,我需要在集合(向量)中查找对象索引,如何查找具有特定属性的对象($ object-> name =“ name:3”)? 有什么建议吗?
这是示例:
<?PHP
//simple class
class tip {
public $ID;
public $name;
}
$col = new \Ds\Vector();
//create few objects in $col
for ($i=0;$i<5;$i++) {
$o = new tip();
$o->ID = $i;
$o->name = "name: $i";
$col->push($o);
}
var_dump($col);
//search should return 4 (as 4 object in vector is object with name: "name: 4" but it returns false
var_dump($col->find("name: 3"));
?>
解决方法
这就是我在@MarkusAO的帮助下解决此问题的方式,首先这是对OP的错误使用,因为@MarkusAO声明使用vector作为存储设备... 这是示例:
std::map<int,A> m; m.insert(std::make_pair(0,A(7))); m.insert(std::make_pair(1,A(3))); m.insert(std::make_pair(2,A(1))); std::vector<A> vec;
std::cout << "Transform" << std::endl;
vec.reserve(m.size());
std::transform(m.begin(),m.end(),std::back_inserter(vec),// changed the key type and return type.
[](const std::pair<const int,A> & p)->const A& { return p.second; });
std::cout << "for_each" << std::endl;
vec.resize(0);
vec.reserve(m.size());
std::for_each(m.begin(),// changed the key type.
[&vec](const std::pair<const int,A> & p) { vec.push_back(p.second); });
std::cout << "START\n";
vec.resize(0);
vec.reserve(m.size());
for (const auto & p : m) {
vec.emplace_back(p.second);
}