Ticket* Championship::findTicketByFanID(unsigned int id) {
hTabTickets::iterator it = tickets.begin();
while(it != tickets.end()) {
if(it->getOwnerID() == id)
return it;
}
}
你好
我想返回迭代器上的对象。 故障单是一个哈希表,用于保存故障单类型的对象。当我搜索它时,有任何解决方案可以返回该对象吗?
我希望能够这样做,所以我可以Ticket t1 = findTicketByFan(id);
hTabTickets:
struct eqTicket {
bool operator() (const Ticket &b1, const Ticket &b2) const{
return b1.getID() == b2.getID();
}
};
struct hTicket{
int operator() (const Ticket &b1) const{
return b1.getID();
}
};
typedef tr1::unordered_set<Bilhete, hTicket, eqTicket> hTabTickets;
此致
答案 0 :(得分:0)
也许你想要这个:
Ticket* Championship::findTicketByFanID(unsigned int id) {
for (hTabTickets::iterator it = tickets.begin(); it != tickets.end(); ++it) {
if(it->getOwnerID() == id)
return &(*it);
}
return NULL;
}
如果您经常搜索ID,则可能需要更改set
的{{1}}。
答案 1 :(得分:0)
参考文献在这里有很大用处。通常返回本地指针不是一个好主意。以下给出了一个案例。您的代码有两个问题:(a)并非所有路径都返回值,(b)哈希表应该快速定位(理想情况下为O(1)),因此循环是一个坏主意。此外,it
没有在循环中递增。
class Campeonato {
// Using STL hashmap
map<unsigned int, int> tickets;
public:
// the return value tells you whether to use iterator or not.
bool findTicketByFanID(unsigned int id, map<unsigned int, int>::iterator &it) {
// std::map provides method find
it = tickets.find(id);
if (it != tickets.end())
return true;
return false;
}
};
答案 2 :(得分:0)
我希望能够这样做,所以我可以做Ticket t1 = findTicketByFan(id);
如果是你的意图,返回类型不正确,它应该通过值或(const)引用返回,而不是指针。另一个问题是,您使用std::unordered::set
并尝试搜索循环,但您应该使用std::unordered_set::find()
代替:
Ticket Championship::findTicketByFanID(unsigned int id)
{
hTabTickets::iterator it = tickets.find( Ticket( id ) );
if( it == tickets.end() ) // not found do something
throw std::runtime_error( "Ticket not found" );
return *it;
}
如果创建临时票证太贵,则应使用std::unordered_map<int,Ticket>
代替并使用id作为键。然后这个函数将是:
Ticket Championship::findTicketByFanID(unsigned int id)
{
hTabTickets::iterator it = tickets.find( id );
if( it == tickets.end() ) // not found do something
throw std::runtime_error( "Ticket not found" );
return it->second;
}
答案 3 :(得分:0)
hTabTickets::iterator it = tickets.begin()
'it'变量的类型既不是Ticket,也不是Ticket *,它是包含键和值变量的对,你使用它错了,可能你需要写:
it->second
访问Ticket本身